为什么不是我的JavaScript和CSScaching?

这似乎只有JavaScript和CSS不caching…但图像caching。

我使用的是Firebug,当我刷新页面时,我注意到Firebug在js / css中有200个HTTP响应 ,但是我的所有图像都收到了304个HTTP代码 (内容未修改)。 所以看来,我的JS和CSS不caching。

另外,当使用YSlow帮助确定我的JS / CSS内容没有caching的问题时,它会告诉我:

有4个组件configuration错误ETags

  • http://www.example.com/css/basic.css
  • http://www.example.com/js/ga.js
  • http://www.example.com/js/dojo/dojo.js

下面列出的是我的.htaccess文件

Options -Indexes Options +FollowSymLinks # Enable ETag FileETag MTime Size # Set expiration header ExpiresActive on ExpiresDefault "access plus 1 week" # Compress some text file types AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml application/x-javascript text/javascript application/javascript application/json # Deactivate compression for buggy browsers BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Set header information for proxies Header append Vary User-Agent 

任何想法我的.htaccess访问文件有什么问题,防止它caching我的CSS或JavaScript?

请考虑禁用 ETag的!

考虑以下设置:

 Header unset ETag FileETag None Header set Cache-Control "max-age=2678400" 

前两条规则完全禁用了ETag,所以浏览器有点被迫监听Cache-Control头。 最后一条规则告诉浏览器缓存文件2678400秒,或1个月。 调整最适合你的设置。 然后在包含静态文件的dir上应用此配置(例如,通过在该目录中放置.htaccess文件)

可选的,如果您使用多个服务器来提供静态内容,和/或不确定这些服务器报告的上次修改时间,请考虑使用:

 Header unset Last-Modified 

它告诉Apache不要提供任何Last-Modified头,所以浏览器只能监听Cache-Control max-age头。

这个设置在很多hightraffic网站上都是我自己使用的,禁用ETag和Last-Modified头文件肯定有助于将流量降低到原来的五分之一。 尤其是Internet Explorer对这些设置非常敏感。

被警告:禁用Last-Modified将停止浏览器询问304个未修改的内容请求。 根据我的经验,这是正面的,因为网络服务器处理的请求较少,浏览器更依赖于服务的缓存控制设置。 但它可能会或可能不适合你。 一些浏览器会尝试每隔几分钟验证一次资产,如果您为它们提供“Last-Modified”标题,那就是为什么我会建议完全禁用它。

哦,如果你不确定你的缓存, 使用http://www.redbot.org/来测试您的资产,它会快速告诉您您的标题对浏览器意味着什么,以及如何解释您使用的不同缓存控制设置。

如果不符合某种特定模式,YSlow会报告错误配置的etags。 由于你压缩的CSS和JS,etags正在输出的东西是这样的:

 Etag "1e10-4889909861a80"-gzip 

看到最后的-gzip? 它放在那里由Apache(仅版本2)。 那是什么导致了“错误”。 YSlow希望看到这样的事情:

 Etag "xxxx-xxxxxxxxxxxxx" 

基本上,你不能解决这个问题,因为它没有被破坏。 所以,如果你不知道自己在做什么,就不要疯狂地尝试获得完美的分数。 即使这个雅虎主页只有90。

这YSlow错误信息是非常误导!

YSlow 实际上抱怨说你一直在使用ETags

YSlow在您的浏览器中运行 – 它无法知道ETag是否配置正确。 作为一个经验法则,它是说你不应该使用ETag,因为你更可能让它们配置错误,而不是在多服务器环境中正确配置。 (YSlow针对的是拥有大型多服务器网站的用户。)

当然,如果你使用的是单服务器设置,或者如果你使用的是分布式服务器设置,但是知道你在做什么,那么ETags就好了。 但YSlow无法知道这一点。

在错误描述页面的注释中有很多关于这个的讨论,你应该看看: http : //developer.yahoo.net/blog/archives/2007/07/high_performanc_11.html

此外,我在serverFault上找到了这个答案,重申了这一点: https : //serverfault.com/questions/55919/yslow-says-etags-are-misconfigured-how-to-configure-etags-properly-on-iis7

我遇到了和你一样的问题。 删除etag将工作。

在配置文件中添加以下内容:FileETag无

是的,这是正确的和众所周知的行为(可能不是真的需要)。

阅读关于ETag的http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

可能你只想在服务器上禁用ETag。

编辑:另外,使用LiveHTTPHeaders插件了解,你的浏览器做什么。 这个任务比FireBug更好。

嗨,我有同样的麻烦。 但只是放入FileETag没有没有工作

我固定的方式(我不知道这是否正确 – 但它的工作原理)是我把它

FileETag没有

在我的htaccess文件的底部。

那么ySlow很高兴。