浏览器端的缓存规则
- 新鲜度(过期机制):1)HTTP协议报头中带有完整的过期时间,并仍在有效内。 2)浏览器已经使用过缓存且在一个会话中检查过新鲜度
- 校验值(验证机制):浏览器再次请求,通过此值判定是否获取新的内容
浏览器缓存的控制
- HTML的<meta>标签,但不是所有浏览器都支持,且对代理服务器无效
- HTTP协议的报头中带有控制信息。
新鲜度:
- Expires: 设定过期的具体时间
- Cache-Control: 更加细致的控制。1)no-cache or no-store。2)max-age。3)public or private
- Last-Modified: 告诉浏览器当前资源的最后修改时间
- If-Modified-Since: 告诉服务器当前资源的浏览器所知道的最后修改时间
校验值:
- ETag:告知浏览器当前资源的唯一标识符
- If-None-Match: 告知服务器当前资源浏览器所知道的唯一标识符
缓存机制的层次
- 通过Cache-Control/Expires形成第一道缓存:直接去本地
- 通过Last-Modified/ETag形成第二道缓存:304返回
ETag存在的原因
- Last-Modified是秒级的,在一秒内多次变化的资源无法体现
- 定期生成的文件,无变化但也无法缓存
优先级
- Cache-Control > Expires
- ETag > Last-Modified
- Cache-Control/Expires > ETag/Last-Modified
不缓存的情况
- HTTP头中,Cache-Control:max-age=0 或是 Cache-Control:no-cache 或是 Pragma:no-cache
- 不带任何和缓存有关的HTTP头时,不缓存
- POST请求不会被缓存
- HTTPS请求不会被缓存
- 动态内容不会被缓存
参考资料:
时间: 2024-10-27 13:50:34