Last-Modify + if-Modified-Since 运行逻辑 - 图1

ETag 和 If-None-Match

原理与此类似,但是在分布式后台系统 Last-Modified 更准确,因为每台电脑生成的 Etag 不一样

Pragma 和 Expires

http1.0 基于 Pragma 和 Expires 控制缓存的生命周期,服务器在 Expires 中设置一个缓存失效的时间,如果人为地改变了客户端的时间,会导致缓存失效,不推荐使用此方式

Cache-Control

http1.1 通过设置 Cache-Control 的 max-age=xx (单位秒)可以控制缓存的周期,Cache-Control 与Expires 同时存在时以 Cache-Control 的为准

在浏览器请求时,如果在 Cache-Control 设置的时间内,直接会使用浏览器的缓存,而 Last-Modify 和 Etag 依旧是有向服务器器发送了一个http请求的,只是服务器再返回了304告诉浏览器我这资源没有变化