10 apache .htaccess etag caching http
它似乎只有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
Run Code Online (Sandbox Code Playgroud)
知道我的.htaccess访问文件有什么问题阻止它缓存我的CSS或JavaScript吗?
小智 6
请考虑禁用 ETag!
请考虑以下设置:
Header unset ETag
FileETag None
Header set Cache-Control "max-age=2678400"
Run Code Online (Sandbox Code Playgroud)
前两个规则完全禁用ETag,因此浏览器有点被迫监听Cache-Control标头.最后一条规则告诉浏览器将文件缓存2678400秒或1个月.将设置调整为最适合您的设置.并在包含静态文件的目录上应用此配置(例如,通过在该目录中放置.htaccess文件)
可选,如果您使用多个服务器来提供静态内容,和/或不确定这些服务器报告的上次修改时间,请考虑使用:
Header unset Last-Modified
Run Code Online (Sandbox Code Playgroud)
它告诉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/测试您的资产,它会快速告诉您标题对浏览器的意义,以及如何解释您使用的不同缓存控制设置.
是的,这是正确且众所周知的行为(也许不是真正需要的)。
有关 ETag,请阅读http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html。
也许您只想在服务器上禁用 ETag。
编辑:另外,使用 LiveHTTPHeaders 插件来了解您的浏览器的功能。对于此任务,它比 FireBug 效果更好。