Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 为什么不是';t我的javascript&;css缓存?_Apache_Http_.htaccess_Caching_Etag - Fatal编程技术网

Apache 为什么不是';t我的javascript&;css缓存?

Apache 为什么不是';t我的javascript&;css缓存?,apache,http,.htaccess,caching,etag,Apache,Http,.htaccess,Caching,Etag,看起来只有javascript和css没有缓存。。。但图像正在缓存 我正在使用Firebug,当我刷新页面时,我注意到Firebug中有很多js/css的200 HTTP响应,但我收到的所有图像的304 HTTP代码(内容未修改)。因此,我的JS和CSS似乎没有缓存 此外,当使用YSlow帮助确定我的JS/CSS内容未缓存的问题时,它会通知我: 有4个组件的ETag配置错误 下面列出的是我的.htaccess文件 Options -Indexes Options +FollowSymL

看起来只有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吗?

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

了解ETag

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


编辑:另外,使用LiveHTTPHeaders插件了解浏览器的功能。对于这项任务,它比FireBug工作得更好。

我遇到了与您相同的问题。 移除etag将起作用

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

嗨,我也有同样的问题。 但是仅仅输入fileTag none是不起作用的

我修复它的方法(我不知道这是否正确,但它是有效的)是我把

FileTag无

在我的htaccess文件的底部


然后ySlow很高兴。

ySlow报告说,如果ETag不遵循特定模式,则ETag配置错误。由于您正在压缩css和js,ETag的输出如下:

Etag "1e10-4889909861a80"-gzip
Etag "xxxx-xxxxxxxxxxxxx"
看到结尾的-gzip了吗?它是由apache(仅限版本2)提供的。这就是导致“错误”的原因。YSlow希望看到类似的情况:

Etag "1e10-4889909861a80"-gzip
Etag "xxxx-xxxxxxxxxxxxx"
基本上,你不能修复它,因为它没有坏。所以,如果你不知道自己在做什么,不要为了得到满分而发疯。甚至雅虎主页也只有90分。

这条YSlow错误消息极其误导人! YSlow实际上是在抱怨你在使用ETag! YSlow在浏览器中运行——它无法知道ETag是否配置正确。根据经验,这意味着您不应该使用ETag,因为在多服务器环境中,ETag更可能被错误配置,而不是正确配置。(YSlow面向拥有大型多服务器网站的用户。)

当然,如果您使用的是单服务器设置,或者如果您使用的是分布式服务器设置,但您知道自己在做什么,那么ETag就可以了。但伊斯洛没有办法知道这一点

在错误描述页面的评论中有很多关于这方面的讨论,您应该查看:


我也在服务器故障上找到了这个答案,重申:

< P>请考虑<强>禁用<强> EtAG! 请考虑以下设置:

Header unset ETag
FileETag None
Header set Cache-Control "max-age=2678400"
前两条规则完全禁用ETag,因此浏览器在某种程度上被迫侦听缓存控制头。最后一条规则告诉浏览器缓存文件2678400秒,即1个月。调整设置以使其最适合您。并将此配置应用于包含静态文件的目录(例如,通过在该目录中放置.htaccess文件)

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

Header unset Last-Modified
它告诉Apache不要提供任何最后修改的头,因此浏览器只能侦听缓存控制最大年龄头

我自己在很多高流量网站上都使用了这种设置,禁用ETag和上次修改的标题肯定有助于将流量降低到原来的五分之一。尤其是Internet Explorer对这些设置非常敏感

请注意:禁用上次修改将阻止浏览器请求304个未修改的内容请求。根据我的经验,这是积极的,因为Web服务器需要处理的请求较少,浏览器更依赖于您提供的缓存控制设置。但它可能适合你,也可能不适合你。一些浏览器会尝试每隔几分钟验证一次资产,如果您为它们提供一个“Last Modified”头,这就是为什么我建议完全禁用它的使用


哦,如果你不确定你的缓存;用于测试您的资产,它可以快速告诉您标题对浏览器意味着什么,以及如何解释您使用的不同缓存控制设置。

实际上不需要三个问号。我删除了两个问号重复:@gumbo-我关闭了另一个主题。这个主题现在是一个实时问题。所以我已经禁用了ETag支持,但是看起来相同的图片/js/css没有返回304个代码。似乎没有什么区别,我已经启用或没有ETag。经过进一步审查,似乎只有javascript和css没有缓存。。。但是图像是缓存的。我在使用LiveHTTPHeaders插件时注意到了这一点,谢谢stepancheg。知道为什么CSS和JS没有被缓存吗?在你第一次询问.JS时显示服务器发送的标题。@stepancheg-知道为什么我的JS和CSS文件没有被缓存吗?好吧,Apache坏了;Etag无效。据我回忆,这在Apache中已经修复。它不应该是
Etag“1e10-4889909861a80-gzip”
-对我来说似乎是Apache的bug。。。