HTTP 缓存过程
根据是否需要重新向服务器发起请求来分类,将其分为两大类:强制缓存
和 协商缓存
缓存(强缓存) | 内容协商(弱缓存) | |
---|---|---|
HTTP 1.1 | Cache-Control: max-age=3600 Etag: ABC | If-None-Match: ABC 响应状态码:304 或 200 |
HTTP 1.0 | Expires: Wed, 21 Oct 2015 02:30:00 GMT Last-Modified: Wed, 21 Oct 2015 01:00:00 GMT | If-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(有请求)