2011-07-22 44 views
2

我帮助维护了几个发布新闻和参考信息的基于Wordpress的网站。在浏览器会话中强制浏览器缓存

我们一直在努力尽可能快地在网站上加载页面。

我们所做的一件事是在我们的大多数静态文件(如图像和css文件)的“缓存控制”http头中实现了很长的“最大年龄”时间。

我们使用的特定缓存控制设置是“public,max-age = 31536000”。 31,536,000秒是365天。

好处在于,此设置确实会导致静态文件在用户浏览我们网站的不同页面时被缓存。

但是,这是蹭。这个缓存控制设置对浏览器会话没有太大帮助。即使该设置应该告诉浏览器“缓存该文件一整年”,如果我们网站的访问者关闭了浏览器,然后在五分钟后启动并返回到我们的网站,浏览器仍然坚持重新加载所有的静态文件,即使它仍然在缓存中。

我已经在Firefox中仔细检查过,查看带有Live HTTP Headers的标题。但是我也可以定性地看到其他浏览器中发生的相同情况。

显然,如果在当前浏览器会话期间内容尚未加载一次,浏览器会坚持重新加载网站的所有内容。

那么......有什么办法可以向浏览器“礼貌地建议”他们总是从缓存中加载缓存内容,即使浏览器在当前浏览器会话期间还没有访问我们的网站?

+0

我花了很多时间仔细研究上述问题。这似乎是问题主要发生在Internet Explorer中。我最初在Firefox中观察到的问题是由于我的特定版本的Firefox中存在脱机存储设置。改变了设置后,Firefox现在看起来非常适合在浏览器会话中使用缓存内容,并且Chrome也似乎在同一方面表现良好。 Internet Explorer(我已经用IE7完成了大部分测试)不太好。我会做更多的测试并报告我发现的内容。 – BeSimple

回答

0

检查ETag,Expires和Last-Modified标题。

您需要一个Expires标头,有时ETag和Last-Modified可以击败缓存。

+0

谢谢@ScottAnderson的反馈意见。 – BeSimple

+0

不幸的是,我们无法控制我们大部分静态内容的Etag和Expires设置,因为它是从CDN提供的,而CDN服务并不能控制这些HTTP标头。 – BeSimple

+0

我们使用的CDN会自动将ETag标头附加到我们提供的静态文件中。如果我们设置“缓存控制”标题,它将不会为该文件提供“Expires”标题。也就是说,我们为网页提供的其他文件(来自Google的API服务)具有“超时”设置,其中包含“Expires”标头,并且没有Etag标头,并且它们将在浏览器会话中重新读取就像我们的文件一样。所以它不是缺少Expires头文件,也不是包含Etag头文件,这是问题的根源。 – BeSimple