我已经在 apache 中为我的 JS 文件设置了 Cache-Control 1 周,但是当我检查浏览器时,Cache-Control 显示无缓存。我哪里缺少配置?
以下是我在apache中的配置
<ifModule mod_headers.c>
<filesMatch "\.(html|htm|png|js|css)$">
Header set Cache-Control "max-age=604800, public"
</filesMatch>
</ifModule>
浏览器中的请求标头
Request URL:http://test.com/Script.js?buildInfo=1.1.200
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
**Cache-Control:no-cache**
Connection:keep-alive
Host:test.com
Pragma:no-cache
Referer:http://test.com/home.jsp
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/37.0.2062.120 Safari/537.36
Query String Parametersview sourceview URL encoded
buildInfo:1.1.200
Response Headersview source
Cache-Control:max-age=2592000
Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/javascript
Date:Sun, 12 Oct 2014 16:17:46 GMT
Expires:Tue, 11 Nov 2014 16:17:46 GMT
Last-Modified:Tue, 07 Oct 2014 13:28:08 GMT
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding
答案1
您需要启用 headers 模块,假设是 debian:
sudo a2enmod headers
然后为了使更改生效,您必须重新加载或重新启动 apache:
sudo service apache2 reload
如果这没有效果,您的配置的其他几个部分也可能会覆盖 Cache-Control 指令,例如在从您的 Web 根目录提供服务的 .htaccess 中。
另外,我不确定 Apache 是否允许在您的服务器配置中使用任何大写字母。可能你必须使用(注意大写的 I),如果 apache 不能识别你的大写,它应该在重新启动时打印错误。
答案2
Cache-Control:no-cache
不会单独出现,它是由应用程序生成的。
无论 Apache 中是否配置了某些内容,应用程序返回的任何内容都将覆盖默认值。
因此,除了 @MartinOlika 的答案之外,还必须审查应用程序,或者如果您愿意,可以在应用程序级别完成所需的配置。