Caching 跨浏览器会话强制浏览器缓存

Caching 跨浏览器会话强制浏览器缓存,caching,http-headers,browser-cache,cache-control,Caching,Http Headers,Browser Cache,Cache Control,我帮助维护几个基于Wordpress的网站,发布新闻和参考信息 我们一直在努力使网站上的页面加载速度尽可能快 我们所做的一件事是在缓存控制http头中为大多数静态文件(如图像和css文件)实现很长的最大使用时间 我们使用的特定缓存控制设置是public,max age=31536000。31536000秒等于365天 这样做的好处是,当访问者浏览我们网站的不同页面时,这种设置确实会导致静态文件被缓存 但问题是。这种缓存控制设置在浏览器会话中对我们没有多大帮助。即使该设置应该告诉浏览器缓存该文件一

我帮助维护几个基于Wordpress的网站,发布新闻和参考信息

我们一直在努力使网站上的页面加载速度尽可能快

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

我们使用的特定缓存控制设置是public,max age=31536000。31536000秒等于365天

这样做的好处是,当访问者浏览我们网站的不同页面时,这种设置确实会导致静态文件被缓存

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

我在Firefox中仔细检查了这一点,并使用实时HTTP头查看了头。但我也可以定性地看到同样的事情在其他浏览器中发生

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


所以。。。我们是否可以礼貌地建议浏览器始终从缓存加载缓存内容,即使浏览器在当前浏览器会话期间未访问过我们的站点?

检查ETag、Expires以及上次修改的标题


您需要Expires标头,有时ETag和Last Modified会破坏缓存。

检查ETag、Expires和Last Modified标头


您需要Expires标头,有时ETag和Last Modified会破坏缓存。

谢谢@ScottAnderson的反馈。不幸的是,我们无法控制大多数静态内容的ETag和Expires设置,因为它是从CDN提供的,CDN服务并没有让我们控制这些HTTP头,我们使用的CDN会自动将ETag头附加到它所服务的静态文件中。如果我们设置缓存控制头,它将不会为文件提供Expires头。这就是说,我们为页面提供的其他文件——它们来自谷歌的API服务——具有长的最大年龄设置,带有Expires头,没有Etag头,并且它们与我们的文件一样,在浏览器会话中被重新读取。因此,问题的根源不是缺少Expires标头或包含Etag标头。感谢@ScottAnderson的反馈。不幸的是,我们无法控制大多数静态内容的Etag和Expires设置,因为它是从CDN提供的,CDN服务并没有让我们控制这些HTTP头,我们使用的CDN会自动将ETag头附加到它所服务的静态文件中。如果我们设置缓存控制头,它将不会为文件提供Expires头。这就是说,我们为页面提供的其他文件——它们来自谷歌的API服务——具有长的最大年龄设置,带有Expires头,没有Etag头,并且它们与我们的文件一样,在浏览器会话中被重新读取。所以问题的根源不是缺少Expires头,也不是包含Etag头,我已经花了很多时间深入研究了我上面描述的问题。问题似乎主要发生在Internet Explorer上。我最初观察到的Firefox问题是由于我的特定版本Firefox中的脱机存储设置。改变了设置后,Firefox现在似乎非常擅长在浏览器会话中使用缓存内容,Chrome在这方面也表现良好。我用IE7做的大部分测试都不太好。我会做更多的测试并报告我的发现。我已经花了很多时间进一步研究我上面描述的问题。问题似乎主要发生在Internet Explorer上。我最初观察到的Firefox问题是由于我的特定版本Firefox中的脱机存储设置。改变了设置后,Firefox现在似乎非常擅长在浏览器会话中使用缓存内容,Chrome在这方面也表现良好。我用IE7做的大部分测试都不太好。我会做更多的测试,并报告我的发现。