很抱歉,这看起来与许多其他问题非常相似,但我查看了所有可以看到的相关帖子,但它们似乎没有和我一样的问题; - )
问题是我无法在我的Apache2服务器上运行.js,.css和图像的客户端缓存(我在Windows下同时拥有Ubuntu Apache / 2.2.8和WAMP Apache)。
使用默认设置,我获得了良好的ETag样式服务器主导的缓存(304响应),但如果我通过将Header Unset命令放入我的虚拟主机配置文件,然后补充缓存指令(见下文)来关闭它,它似乎没有被浏览器尊重。
我可以看到使用Firebug浏览器知道缓存文件在几个小时内有效,但无论如何它仍然会要求它。
任何有关如何调试此功能的提示都是非常受欢迎的。
主机配置的相关部分如下所示:
<VirtualHost *:80>
DocumentRoot "C:/Projects/A2C/branches/CR7"
ServerName *
ServerAlias localhost ecomsvr0.dmclub.net
ErrorLog "c:\log\a2c.log"
CustomLog "c:\log\a2c-access.log" common
<Directory "c:\projects\A2C\branches\CR7">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
Allow from all
ExpiresDefault A36000
Header Set Cache-Control "max-age=7200"
Header Unset Etag
Header Unset Last-Modified
</Directory>
</VirtualHost>
答案 0 :(得分:1)
让我感到震惊的是,您不发送任何验证器(Last-Modified或ETag)。虽然它们不是强制性的,但我强烈建议您发送一个,以使浏览器能够执行条件请求。 RFC 2616说“HTTP / 1.1服务器应该在可行的情况下发送Last-Modified。”这绝不是问题的根本原因,但很可能是。
所以我建议删除“Header Unset Last-Modified”这一行并再次检查。
请注意,您的Expires是访问时间加上36000s,而您的最大年龄时间是7200s,这没有意义。理解新的Cache-Control指令的浏览器(所有新浏览器都会这样做)将使用max-age。
如果添加Last-Modified不起作用,您可以发布服务器发送的完整响应标头吗?例如,转到http://redbot.org/并针对您的服务器运行此检查程序并发布结果。这将进一步帮助您找出问题所在。