http一些问题整理

29 阅读2分钟

HTTP3 VS HTTP2

这个也是面试中,当问起HTTP3时,最常被问到的问题

  1. 传输层协议: HTTP/3.0采用了基于UDP的传输层协议,称为QUIC(Quick UDP Internet Connections)。相较于基于TCP的HTTP/1.1和HTTP/2.0,QUIC具有更低的连接建立和断开延迟,以及更好的拥塞控制机制。
  2. 多路复用: HTTP/3.0继承了HTTP/2.0的多路复用特性,允许在单个连接上同时传输多个请求和响应,提高了网络性能。
  3. 头部压缩: HTTP/3.0采用了与HTTP/2.0相似的头部压缩机制,通过减小数据包大小来提高传输效率。
  4. 连接迁移: QUIC允许在不中断连接的情况下更改网络接口,从而提高移动设备切换网络的体验。
  5. 0-RTT握手: HTTP/3.0支持零往返时间(0-RTT)握手,这意味着客户端可以在与服务器的先前会话中发送数据,而无需等待握手完成。
  6. 安全性: HTTP/3.0强制使用加密,因此所有通信都是通过TLS进行的,这有助于提高数据的安全性和隐私性。

http缓存

强制缓存协商缓存是HTTP协议中两种不同的缓存控制机制,它们有不同的实现方式和适用场景。

强制缓存:

  • 强制缓存是通过设置HTTP响应头来实现的,常见的头字段是Cache-ControlExpires
  • Cache-Control包含了指令,定义了缓存策略,例如max-age表示资源在多长时间内有效。
  • Expires是一个HTTP 1.0的字段,表示资源的过期时间。
  • 当客户端请求资源时,如果发现强制缓存有效,客户端直接使用本地缓存,不发送请求到服务器,从而减少了网络开销和加载时间。

协商缓存

协商缓存流程如下:

  • 浏览器初次请求资源,服务器返回资源,同时生成一个etag值携带在响应头中返回给浏览器
  • 浏览器再次请求资源的时候会在请求头里携带If-None-Match,值为之前返回的etag的值
  • 服务器收到之后拿该值与资源最新的etag值进行对比,如果没有变化返回304告诉浏览器使用缓存中的值,如果发生变化返回200和最新的资源文件给浏览器使用
  • 除了etag值之外还有Last-Modified,服务器返回Last-Modified为文件的修改时间Last-Modified 表示本地文件最后修改日期,浏览器会在request header加上If-Modified-Since(上次返回的Last-Modified的值),询问服务器在该日期后资源是否有更新,有更新的话就会将新的资源发送回来值