Expires:
http1.0推出,指服务器返回的文件有效期
Last-Modified:
http1.0推出的,指服务器文件的最后修改时间,浏览器会带上If-Modified-Since向服务器发送请求,与服务器文件修改时间Last-Modified做对比,如果时间不同,则获取数据返回200,否则返回304后调用浏览器本地硬盘的缓存
Cache-Control:
属于http1.1 指文件缓存的有效期
缓存头总结(摘自张开涛《亿级流量.网站架构核心技术》):
public: 响应头,可共享缓存(客户端和代理服务器都可以缓存),响应可以被缓存
private: 响应头,可私有缓存(客户端可以缓存,代理服务器不能缓存)比如用户私有内容,不能缓存
no-cache: 请求头使用时表示需要回源验证,响应头使用时表示允许缓存者缓存响应,但是,使用时必须回源验证,所以此处叫no-cache 并不是很好
no-store:请求和响应禁止缓存
max-age:缓存的保鲜期和Expires 类似,根据该值校验缓存是否新鲜
s-maxage: 与max-age 的区别是其金用于共享缓存(如缓存代理服务器),当客户端缓存不新鲜时遇到此头需要重新验证.
max-stale: 缓存的最大陈旧时间爱你,如果缓存不新鲜但还在该最大陈旧时间内,则可以返回陈旧的内容
min-fresh: 缓存的最小新鲜期,请求时使用(保鲜期-当前Age) < min-fresh 判断内容是否新鲜.
must-revalidate: 当缓存过了新鲜期后,必须回源重新验证,与no-cache 类似,但是更严格,不能使用后台重新验证,而no-chache允许后台重新验证
proxy-revalidate: 与must-revalidate类似,但是支队缓存代理服务器有效,客户端遇到此头需要回源重新验证.
stale-while-revalidate: 请求时,表示在置顶时间内可以先返回陈旧的内容,后台进行重新验证(如异步验证)
stale-if-error: 请求时,表示指定时间内,当重新验证请求响应状态码为500,502,503,504 时,可以使用陈旧内容
only-if-cached: 请求时,使用该头表示只能从环衬获取响应,如果没有,则504 Gateway Timeout
ETag:
属于http1.1,该版本号是由服务端随机生成的,浏览器会带上If-None-Match向服务器发送请求,与服务器文件修改版本ETag做对比,如果版本号不同,则获取数据返回200,否则返回304后调用浏览器本地硬盘的缓存
http1.1>http1.0 所以Cache-Control>Expires,ETag>Last-Modified