- Pragma是http1.0的产物,http1.1仍可用,优先级最高,其次是Cache-Control,最后是Expires,这三个都属于客户端,如果缓存,则不会向服务器发送请求,状态码为200,F5会清除这些
- Last-Modified是E-tag的备用机制
首先是E-tag,头部的条件请求会使用If-Match和If-None-Match字段,E-tag值前面加”W/”,表示是弱验证,容易生成。对于GET 和 HEAD方法,搭配Range首部使用,可以用来保证新请求的范围与之前请求的范围是对同一份资源的请求。如果 ETag 无法匹配,那么需要返回 416(Range Not Satisfiable,范围请求无法满足) 响应。
对于其他方法来说,尤其是 PUT, If-Match首部可以用来避免更新丢失问题。它可以用来检测用户想要上传的不会覆盖获取原始资源之后做出的更新。如果请求的条件不满足,那么需要返回 412(Precondition Failed,先决条件失败) 响应。
其次是Last-Modified,头部的条件请求会使用If-Modified-Since和If-Unmodified-Since字段,对比的是资源的修改时间,示例:If-Unmodified-Since: Wed, 21 Oct 2015 07:28:00 GMT,这两个如果对比成功则返回304,否则返回新资源,Ctrl+F5将重新获取资源