HTTP3 VS HTTP2
这个也是面试中,当问起HTTP3时,最常被问到的问题
- 传输层协议: HTTP/3.0采用了基于UDP的传输层协议,称为QUIC(Quick UDP Internet Connections)。相较于基于TCP的HTTP/1.1和HTTP/2.0,QUIC具有更低的连接建立和断开延迟,以及更好的拥塞控制机制。
- 多路复用: HTTP/3.0继承了HTTP/2.0的多路复用特性,允许在单个连接上同时传输多个请求和响应,提高了网络性能。
- 头部压缩: HTTP/3.0采用了与HTTP/2.0相似的头部压缩机制,通过减小数据包大小来提高传输效率。
- 连接迁移: QUIC允许在不中断连接的情况下更改网络接口,从而提高移动设备切换网络的体验。
- 0-RTT握手: HTTP/3.0支持零往返时间(0-RTT)握手,这意味着客户端可以在与服务器的先前会话中发送数据,而无需等待握手完成。
- 安全性: HTTP/3.0强制使用加密,因此所有通信都是通过TLS进行的,这有助于提高数据的安全性和隐私性。
http缓存
强制缓存和协商缓存是HTTP协议中两种不同的缓存控制机制,它们有不同的实现方式和适用场景。
强制缓存:
- 强制缓存是通过设置HTTP响应头来实现的,常见的头字段是
Cache-Control
和Expires
。 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
的值),询问服务器在该日期后资源是否有更新,有更新的话就会将新的资源发送回来值