2011-04-27 61 views

回答

103

Cache-Control在HTTP/1.1中引入,并提供比Expires更多的选项。它们可以用来完成相同的事情,但Expires的数据值是HTTP日期,而Cache-Control max-age可让您指定相对时间量,以便您可以指定“请求页面后X小时”。

HTML Cache control是一个非常相似的问题,并有一个很好的链接到缓存教程,应该回答你的大部分问题(例如,http://www.mnot.net/cache_docs/#EXPIRES)。总而言之,当你需要更多的控制缓存的方式时,推荐使用Expires作为静态资源,比如图像和Cache-Control

+8

值得评论说,缓存控制是所有浏览器将使用什么,但同时指定报头,以防万一有在路上老代理它是有用的。 – 2012-09-17 14:33:07

+3

使用服务http://redbot.org/(也可以通过[Mark Nottingham](http:// stackoverflow。com/users/152646/mark-nottingham),他写了上面答案中引用的缓存文章)来检查缓存头的正确用法。 – daxim 2013-03-06 14:35:24

+19

此外: “当存在Cache-Control和Expires时,Cache-Control优先。” - [mnot.net/cache_docs/](http://www.mnot.net/cache_docs/) – KFunk 2014-08-12 23:02:44

22

如果您使用的是CDN(云传输网络),我建议您使用具有最大使用时间(以秒为单位)的缓存控制。例如Cache-Control:max-age = 604800。 这样可以防止您的原始服务器发出请求峰值:使用“Expires Wed,20xx 20xx 04:37:07 GMT”时,所有浏览器都会同时请求您。

+14

Apache(也可能是许多服务器)通常使用请求文件的时间来设置到期日期+您指定的超时。由于这个日期是使用秒,所以你的场景是不太可能的,并且行为与'''cache-control'''相同。所以我不明白为什么在使用'Expires:'''时会​​出现请求峰值 – hilnius 2015-05-27 12:20:23

2

Heroku devcenter在这个问题上有一个excellent article

从它引用,

虽然Cache-Control头开启客户端缓存,并设置一个资源的最大年龄,报头被用于指定在时间上的资源的特定点的过期不再有效。

11

根据该谷歌开发文章,HTTP Caching

Cache-Control头被定义为HTTP/1.1规范 的一部分,并取代先前的报头(例如到期)用来定义响应 缓存政策。所有现代浏览器都支持Cache-Control,因此我们只需要这一点就可以使用 。

0

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字段。