最近终于花了一点时间,对 http 缓存的知识进行了系统的复习,现在整理下来和大家分享,欢迎拍砖。
一、浏览器第一次向服务器请求资源后,服务器返回的响应头中可能包含以下内容(参数值只作为示例, 不作为实际值使用)
cache-control: max-age=30
date: Mon, 04 May 2020 07:53:03 GMT
expires: Mon, 01 Jan 1990 00:00:00 GMT
last-modified: Thu, 30 Apr 2020 09:44:12 GMT
etag: 0x8D7D6C2CA95A265
二、当第二次请求相同的资源时,请求头会包含以下内容
if-modified-since: Thu, 30 Apr 2020 09:44:12 GMT
if-none-match: 0x8D7D6C2CA95A265
注意:if-modified-since 等于第一次请求的 last-modified,if-none-match 等于第一次请求的 etag
1、判断强缓存是否有效(浏览器)
1) now < expires,读取本地缓存,响应码 200
2) now - last-modified < max-age=30,读取本地缓存, 响应码 200
3) max-age 优先级高于 expires
2、强缓存失效, 向服务器发起请求,判断协商缓存是否有效(服务器)
1) 服务器检查 if-modified-since == last-modified, 使用本地缓存 响应码 304
2) 服务器检查 if-none-match === etag, 使用本地缓存, 响应码 304
3) etag 优先级高于 last-modified
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。