Skip to main content

HTTP 缓存过程

根据是否需要重新向服务器发起请求来分类,将其分为两大类:强制缓存协商缓存

缓存(强缓存)内容协商(弱缓存)
HTTP 1.1Cache-Control: max-age=3600 Etag: ABCIf-None-Match: ABC 响应状态码:304 或 200
HTTP 1.0Expires: Wed, 21 Oct 2015 02:30:00 GMT Last-Modified: Wed, 21 Oct 2015 01:00:00 GMTIf-Modified-Since: Wed, 21 Oct 2015 01:00:00 GMT 响应状态码:304 或 200

需要详细的了解 ETag、CacheControl、Expires 的异同

强制缓存

  • Cache-Control Cache-Control: max-age=3600 是设置过期时长(相对时间),跟本地时间无关
  • Expires Expires 是设置过期时间(绝对时间),但是如果用户的本地时间错乱了,可能会有问题

Expires 与 Cache-Control 的区别:Expires 设置为绝对时间,Cache-Control 设置为相对时间

对比缓存

  • ETag/If-None-Match ETag 是通过对比浏览器和服务器资源的特征值(如 MD5)来决定是否要发送文件内容,如果一样就只发送 304(not modified)
  • Last-Modified/If-Modidied-Since Last-Modified 是对比浏览器和服务器资源的最后修改时间,来决定是否要发送文件内容,若资源的最后修改时间晚于 If-Modified-Since,表示资源已被改动,则响最新的资源,返回 200 状态码 若资源的最后修改时间早于或等于 If-Modified-Since,表示浏览器端的资源已经是最新版本,响应 304 状态码,通知浏览器继续使用缓存中的资源。

强制缓存与对比缓存的区别

  • 强制缓存,浏览器直接从本地缓存中获取数据,不与服务器进行交互(无请求)
  • 对比缓存:浏览器发送请求到服务器,服务器判定是否可使用本地缓存,且服务器返回状态码为 304(有请求)

参考文章