HTTP协议常见面试题二【干货】

当精力有限时,想一下眼下本身最看重什么,有选择性的取舍,将宝贵的时间投入到产出比最大的事情上。面试

根据计划,第一章节介绍【软件测试理论】部分,目前已输出十篇文章:npm

第一篇:软件测试的目的【杂谈】浏览器

第二篇:软件测试七大原则【干货】缓存

第三篇:软件测试新七大原则【干货】安全

第四篇:软件测试的分类【笔记】服务器

第五篇:软件测试的方法【笔记】cookie

第六篇:软件测试的工具【笔记】框架

第七篇:如何作好业务测试【杂谈】工具

第八篇:如何作好接口测试【杂谈】测试

第九篇:HTTP协议常见状态码【干货】

第十篇:HTTP协议常见面试题一【干货】

下面开始个人第十一篇文章,分享【HTTP协议常见面试题二】(接着上一篇继续)。

6、缓存

  1. 强缓存
  1. 经过设置Expires和Cache-Control实现。强缓存表示在缓存期间不须要发起请求,状态码为200
  2. Expires是HTTP/1的产物,值为缓存的过时时间
  1. Cache-control出现于HTTP/1.1,优先级比Expires高
  2. Expires指定一个绝对的过时时间(GMT格式),这么作会致使至少2个
  1. 客户端和服务器时间不一样步致使Expires的配置出现问题
  2. 很容易在配置后忘记具体的过时时间,致使过时来临出现浪涌现象
  1. max-age 指定的是从文档被访问后的存活时间,这个时间是个相对值(好比:3600s),相对的是文档第一次被请求时服务器记录的Request_time(请求时间)
  2. Expires指定的时间能够是相对文件的最后访问时间(Atime)或者修改时间(MTime),而max-age相对对的是文档的请求时间(Atime)
  1. 在Apache中,max-age是根据Expires的时间来计算出来的max-age = expires- request_time:(mod_expires.c)
  1. 协商缓存
  1. 经过设置Last-Modified和ETag实现。若是缓存过时了,就须要发起请求验证资源是否有更新。若是发起请求验证资源没有改变,返回状态304,而且更新浏览器缓存的有效期。
  2. Last-Modified和If-Modified-Since:Last-Modified表示本地文件最后修改日期,If-Modified-Since会将Last-Modified的值发送给服务器,询问该日期以后的资源是否有更新,有就将新资源发送来,没有返回304状态码。
  1. ETag和If-None-Match:ETag出现于HTTP/1.1,他的优先级比Last-Modified高。ETag相似于文件的指纹,If-None-Match会将ETag发送给服务器,询问该ETag是否变更,有变更的话就将获取新的资源。
  2. Last-Modified 的问题在于它的精度在秒(s)的级别,比较适合不太敏感的静态资源。
  1. Nginx 官方默认的 ETag 计算方式是为"文件最后修改时间16进制-文件长度16进制"。
  2. Express 框架使用了 serve-static 中间件来配置缓存方案,使用了一个叫 etag 的 npm 包来实现 etag 计算
  1. 使用文件大小和修改时间
  2. 使用文件内容的hash值和内容长度
  1. F5与Ctrl+F5的区别
  1. F5:跳过强缓存,但会检查协商缓存
  2. Ctrl+F5:直接从服务器加载,跳过强缓存和协商缓存
  1. Cache-Control
  1. 若是咱们给咱们的cache-control设置了no-cache之后,每次浏览器发起设置了cache-control资源请求的时候,都会到服务器端进行资源的验证,验证完了之后,若是肯定这个资源能够使用缓存,才会读取本地的缓存。
  2. no-store 彻底不使用缓存

 

7、安全

  1. XSS:攻击者经过页面注入可执行的代码的攻击方式,防护方法:
  1. 将用户输入的内容,进行转义,过滤标签和标签属性
  2. 使用CSP告诉浏览器限制外部资源能够加载和执行,开启CSP有两种方式:
  1. 设置HTTP-Header中的Content-sesurity-Policy
  2. 设置标签的方式
  1. CSRF:跨站请求伪造,如获取cookie伪造用户登录状态,防护方法:
  1. 设置cookie的SameSite
  2. 验证Referer
  1. 登录后服务器下发一个随机token,以后的请求带上

8、三次握手

三次是最小的安全次数,为了让客户端和服务端都能肯定彼此发起和响应的能力是否靠谱

  1. 客户端发送SYN包
  2. 服务端接收到SYN包以后将SYN+ACK包发送给客户端
  1. 客户端接收到SYN+ACK包以后,向服务器发送确认包ACK
  2. 服务端接收到以后链接成功,开始传输数据

9、四次挥手

关闭链接是双向的,客户端和服务器均可以提出,四次挥手是为了避免让关闭太仓促,保证可靠性

  1. 客户端发送一个FIN,用来关闭客户到服务器的数据传送。
  2. 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
  1. 服务器关闭客户端的链接,发送一个FIN给客户端。
  2. 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

 

以上原文来自个人公众号【不仅是测试】,扫描加关注哦O(∩_∩)O~

相关文章
相关标签/搜索