A L*_*Lee 125

Cache-Control在HTTP/1.1中引入并提供了更多选项Expires.它们可用于完成相同的事情,但数据值Expires是HTTP日期,而Cache-Controlmax-age允许您指定相对的时间量,因此您可以指定"请求页面后X小时".

HTML Cache控件是一个非常相似的问题,并且与缓存教程有很好的链接,可以回答大部分问题(例如,http://www.mnot.net/cache_docs/#EXPIRES).总而言之,Expires建议用于静态资源(如图像)以及Cache-Control何时需要更多控制缓存的方式.

  • 此外:"当存在Cache-Control和Expires时,Cache-Control优先." - [mnot.net/cache_docs/](http://www.mnot.net/cache_docs/) (31认同)
  • 值得评论的是,缓存控制是所有浏览器都会使用的,但是如果在路上有旧代理的情况下指定两个头文件会很有用. (8认同)
  • 使用服务http://redbot.org/(也是[Mark Nottingham](http://stackoverflow.com/users/152646/mark-nottingham),他已经编写了上面答案中引用的缓存文章)来检查正确使用缓存标头. (3认同)

小智 33

如果您使用的是CDN(云交付网络),我建议使用Cache-Control,最长时间为秒.例如,Cache-Control:max-age = 604800.这可以防止请求峰值到您的原始服务器:使用"Expires Wed,30 Oct 20xx 04:37:07 GMT",所有浏览器都会同时请求您.

  • Apache(可能还有许多服务器)通常使用请求文件的时间和您指定的超时来设置到期日期.由于此日期使用秒,因此您的场景不太可能,并且行为与```cache-control```相同.所以我不明白为什么在使用```Expires:```时会​​有请求达到峰值 (19认同)

Pau*_*aul 17

根据Google Developers的这篇文章,HTTP缓存:

Cache-Control标头被定义为HTTP/1.1规范的一部分,并取代用于定义响应缓存策略的先前标头(例如Expires).所有现代浏览器都支持Cache-Control,因此这就是我们所需要的.

  • 不仅所有现代浏览器都支持它——它们也应该像规范中那样:“如果响应同时包含 Expires 标头和 max-age 指令,则 max-age 指令会覆盖 Expires 标头,即使 Expires标头更具限制性” [https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html] (2认同)

nod*_*ejh 5

Cache-Control是在HTTP / 1.1中定义的,它告诉从服务器到客户端的所有缓存机制是否可以缓存此对象。以秒为单位:Cache-Control: max-age=3600

Expires报头字段给出的日期/时间之后,响应被视为失效。Expires值是HTTP日期时间戳:Expires: Tue, 18 Jul 2017 16:07:23 GMT

如果响应中包含Cache-Control带有max-age指令的字段,则接收者必须忽略该Expires字段。