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

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

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

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

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

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

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

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

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

第七篇:如何做好业务测试【杂谈】

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

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

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

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

六、缓存

  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 完全不使用缓存

 

七、安全

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

八、三次握手

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

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

九、四次挥手

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

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

 

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

posted @ 2021-08-08 14:38  程序媛淼淼  阅读(87)  评论(0)    收藏  举报