它只显示javascript和css不缓存......但图像正在缓存。
我正在使用Firebug,当我刷新页面时,我在Firebug中注意到js / css有很多 200个HTTP响应,但我正在接收 304个HTTP代码(内容)对于我的所有图像都没有修改过。所以看来我的JS和CSS没有缓存。
此外,当使用YSlow帮助确定我的JS / CSS内容没有缓存的问题时,它告诉我:
有4个组件配置错误的ETag
下面列出的是我的.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访问文件有什么问题,导致它无法缓存我的CSS或JavaScript吗?
答案 0 :(得分:5)
请考虑禁用 ETag!
考虑以下设置:
Header unset ETag
FileETag None
Header set Cache-Control "max-age=2678400"
前两个规则完全禁用ETag,因此浏览器有点被迫监听Cache-Control标头。最后一条规则告诉浏览器将文件缓存2678400秒或1个月。将设置调整为最适合您的设置。并在包含静态文件的目录上应用此配置(例如,在该目录中放置.htaccess文件)
可选,如果您使用多个服务器来提供静态内容,和/或不确定这些服务器报告的上次修改时间,请考虑使用:
Header unset Last-Modified
它告诉Apache不提供任何Last-Modified标头,因此浏览器只能监听Cache-Control max-age标头。
我自己在许多高效网站上使用此设置,禁用ETag和Last-Modified标头确实有助于将流量降低到过去的五分之一。特别是Internet Explorer对这些设置非常敏感。
警告:禁用Last-Modified会阻止浏览器询问304 Content Not Modified请求。根据我的经验,这是积极的,因为Web服务器处理的请求较少,浏览器更多地依赖于您提供的Cache-Control设置。但它可能适合你,也可能不适合你。如果你为它们提供“Last-Modified”标题,有些浏览器会每隔几分钟尝试验证资产,这就是为什么我会建议完全禁用它的使用。
哦,如果你不确定你的缓存;使用http://www.redbot.org/来测试您的资产,它会快速告诉您标题对浏览器的意义,以及如何解释您使用的不同缓存控制设置。
答案 1 :(得分:2)
YSlow报告错误配置的etags如果他们不遵守某种模式。因为你正在压缩css和js,所以etags的输出是这样的:
Etag "1e10-4889909861a80"-gzip
最后看到-gzip?它由apache(仅限版本2)放在那里。这就是造成“错误”的原因。 YSlow希望看到类似的东西:
Etag "xxxx-xxxxxxxxxxxxx"
基本上,你不能解决这个问题,因为它没有被打破。所以,如果你不知道自己在做什么,不要试图获得满分。即使雅虎主页只有90。
答案 2 :(得分:2)
YSlow在您的浏览器中运行 - 它无法知道ETag是否配置正确。根据经验,它表示您不应该使用ETag,因为您更可能让它们配置错误而不是在多服务器环境中正确配置。 (而YSlow针对的是拥有大型多服务器网站的用户。)
当然,如果您使用的是单服务器设置,或者如果您使用的是分布式服务器,但知道自己在做什么,那么ETag就可以了。但是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
答案 3 :(得分:1)
是的,这是正确且众所周知的行为(可能不是真的需要)。
阅读关于ETag的http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html。
可能你只想在服务器上禁用ETag。
编辑:此外,使用LiveHTTPHeaders插件来了解您的浏览器的功能。它比FireBug更适合这项任务。
答案 4 :(得分:1)
我遇到了和你一样的问题。 删除etag将有效。
在配置文件中添加以下内容: FileETag无
答案 5 :(得分:0)
嗨我遇到了同样的麻烦。 但只是放入FileETag就没有用了
我修复它的方式(我不知道这是否正确 - 但它有效)是我把
FileETag none
位于我的htaccess文件的底部。
然后ySlow很开心。