最近终于花了一点时间,对 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


前端小五
10 声望0 粉丝

原谅我这一生不羁放纵爱自由