0

抱歉,这似乎与许多其他问题非常相似,但我查看了我能看到的所有相关帖子,但它们似乎与我没有完全相同的问题 ;-)

问题是我无法让 .js、.css 和图像的客户端缓存从我的 Apache2 服务器(我有 Ubuntu Apache/2.2.8 和 Windows 下的 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>
4

1 回答 1

1

令我印象深刻的是您没有发送任何验证器(Last-Modified 或 ETag)。虽然它们不是强制性的,但我强烈建议您发送一个,以使浏览器能够执行条件请求。RFC 2616说“HTTP/1.1 服务器应该尽可能发送 Last-Modified”。这一定不是问题的根本原因,但很可能是。

所以我建议删除“Header Unset Last-Modified”这一行并再次检查。

请注意,您的 Expires 是访问时间加上 36000 秒,而您的最大年龄时间是 7200 秒,这没有意义。了解新 Cache-Control 指令的浏览器(所有新浏览器都这样做)将选择 max-age。

如果添加 Last-Modified 不起作用,您能否发布您的服务器发送的完整响应标头?例如,访问http://redbot.org/并针对您的服务器运行此检查器并发布结果。这将进一步帮助确定您的问题。

于 2011-03-07T21:41:54.367 回答