HTTP缓存
缓存位置:按缓存位置分为Service Worker、Memory Cache、Disk Cache、Push Cache等
缓存策略:
-
强缓存 : Expires 、Cache-Control
关键HTTP头:
-
Expires: Wed, 21 Oct 2025 07:28:00 GMT(绝对时间,容易受客户端时间影响) -
Cache-Control: max-age=3600, public(相对时间,推荐使用)
存储位置:
-
Memory Cache(内存缓存):用于短时间内频繁访问的资源(如当前页面的 CSS、JS)。
-
Disk Cache(磁盘缓存):用于存储较大的资源,关闭页面后仍然有效。
如果有缓存就直接返回缓存,不需要向服务器发起请求
检查强缓存(
Cache-Control/Expires):-
若未过期 → 直接使用缓存(状态码
200 (from cache))。 -
若过期 → 进入协商缓存流程
-
-
协商缓存 : ETag(缓存存储) 、Last-Modified(缓存存储)、 If-Modified-Since(发起请求携带)、If-None-Match(发起请求携带)
关键HTTP头:
-
Last-Modified(资源的最后修改时间) &If-Modified-Since -
ETag(资源的唯一标识符) &If-None-Match
协商缓存验证
如果第一次发起请求,没有缓存,则将ETag ,Last-Modified 作为标志
有缓存也要向服务器发起请求,并携带标志到请求头,格式:If-Modified-Since : Last-Modified 的值
-
浏览器携带
If-None-Match(ETag 值)或If-Modified-Since(时间戳)向服务器发起请求。 -
服务器对比标识:
-
未更新 → 返回
304,浏览器使用缓存。 -
已更新 → 返回
200和新资源,更新本地缓存。
-
-
HTTP 1.x 和 HTTP 2.0有什么区别(含HTTPS)
HTTP 基本的报文格式就是 header + body,头部信息是 key-value 简单文本的形式
HTTP 1.0 :
一次 TCP 连接中只能发一个请求,也就是每次发请求都要三次握手四次挥手
HTTP 1.1 : 优化 HTTP1.0
-
支持管道长连接:一次 TCP 连接可以发送多个请求,并且不用等待前一个请求响应回来再发起(不管响应没有都可以继续发)
-
队头阻塞:返回需要按照顺序,先发送的请求,必须由服务器先返回(发送A、B两个请求,A请求先发送但处理慢 - 30s,B请求后发送但处理快 - 2s,B请求会等待间隔的20多秒才能返回)
HTTP 2.0 : 优化 HTTP 1.1
-
基于HTTPS
-
头部压缩 :如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分
HPACK算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。 -
多路复用:并发请求,但不用按照顺序返回 ===> 解决队头阻塞,具体措施为数据采用二进制格式、stream流传输
-
数据二进制格式:采用二进制格式方便流传递,其次二进制报文可以直接被计算器解析,提高效率
-
stream流传输:添加数据包标识,指出数据包属于哪一个请求
-
服务器可以主动推送
HTTP 3.0 : 优化 HTTP 2.0
多个 HTTP 请求在复用一个 TCP 连接,下层的 TCP 协议是不知道有多少个 HTTP 请求的。所以一旦发生了丢包现象,就会触发 TCP 的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。
处理:
-
将下层的 TCP 换成 UDP,虽然 UDP 是不可靠传输的,但基于 UDP 的 QUIC 协议 可以实现类似 TCP 的可靠性传输。
-
头部压缩算法也升级成了
QPack -
HTTPS 要建立一个连接,要花费 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数
HTTPS :
-
HTTP 是明文传输,HTTPS 是对称加密与非对称加密组成的混合加密
-
HTTPS 在 HTTP 与 TCP 层之间加入了
SSL/TLS协议,交互次数增加 -
HTTP 默认端口是 80 ,HTTPS 默认端口是 443
-
HTTPS 需要证书