缓存是一种保存资源副本并在下次请求时直接使用该副本的技术,可以缓解服务器端压力,提升性能(获取资源的耗时更短了)。
首部 |
描述 |
Cache-Control:max-age |
Max-age值定义了文档的最大使用期——从第一次生成文档到文档不再新鲜为止的最大合法生存时间(以秒为单位) 例 Cache-Control:max-age = 484200 |
Expires |
指定了一个绝对的过期日期。如果过期日期已经过了,说明文档不再新鲜。 例 Expires:Fir, 05 Jul 2002, 05:00:00 GMT |
这两个首部可以防止缓存提供未经证实的已缓存对象。
标识为no-store的请求或响应会禁止缓存对客户端请求或服务端响应进行复制,每次客户端发起请求都会向服务器端获取完整的响应内容。
允许缓存但要进行再验证,每当有请求发出,缓存会将该请求发到服务器端,验证该请求所描述的内容在缓存中是否过期。若未过期,才允许缓存使用本地副本回复客户端。
实际上可以配置缓存,使其可以提供一些陈旧(过期)对象给客户端,以提升性能。但如果原始服务器希望缓存严格遵守过期信息,可以在原始响应中附加 Cache-Control:must-revalidate 首部。这样,缓存在没有事先与原始服务器进行再验证的情况下,不能提供这个对象的陈旧副本;若再验证过程中原始服务器不可用,则缓存会返回一条 504 Gateway Timeout错误。
规则:
首部 |
描述 |
If-Modified-Since:<date> (弱校验器) |
如果从指定日期之后文档被修改,就执行请求的方法(例如GET)来获取携带新首部的新文档。若没被修改则返回 304 Not Modified响应报文(携带新首部但不会返回文档) |
If-None-Match:<tags> (强校验器) |
针对那些被周期性重写但内容基本不变的文档,或者所做修改不重要的文档。服务器为文档提供特殊的标签(ETags),只要是上述情况,标签并不会改变。当已缓存标签与服务器标签不一致时才会执行请求的方法,否则仍返回304 Not Modified响应报文 |
Vary响应头决定了对于后续的请求头,如何判断是请求一个新的资源还是使用缓存的文件。当缓存服务器收到一个请求,只有当前的请求和原始(缓存)的请求头跟缓存的响应头里的Vary都匹配,才能使用缓存的响应。