标头在javascript文件上失效

时间:2012-10-14 12:13:55

标签: apache .htaccess header mod-expires

我无法让JS文件上的expire标头正常工作..它在CSS文件上工作正常!?

有谁能告诉我我做错了什么? :(

htaccess的

ExpiresActive on
ExpiresDefault A0
ExpiresByType image/gif A29030400
ExpiresByType image/jpeg A29030400
ExpiresByType image/png A29030400
ExpiresByType text/css A29030400
ExpiresByType text/javascript A29030400
ExpiresByType application/x-javascript A29030400
CSS文件

上的

标题
Cache-Control   max-age=29030400
Connection  Keep-Alive
Date    Sun, 14 Oct 2012 12:06:45 GMT
Etag    "be-4cbcf2ad48b40"
Expires Sun, 15 Sep 2013 12:06:45 GMT
Keep-Alive  timeout=5, max=97
Server  Apache/2.4.2 (Win64) PHP/5.4.3
JS文件

上的

标题
Cache-Control   max-age=0
Connection  Keep-Alive
Date    Sun, 14 Oct 2012 12:06:45 GMT
Etag    "1ad-4cc00d069f493"
Expires Sun, 14 Oct 2012 12:06:45 GMT
Keep-Alive  timeout=5, max=99
Server  Apache/2.4.2 (Win64) PHP/5.4.3

4 个答案:

答案 0 :(得分:9)

(暂无评论......) 我运行以下设置,它的工作原理。

ExpiresByType text/js "access plus 1 years"
ExpiresByType text/javascript "access plus 1 years"
ExpiresByType application/javascript "access plus 1 years"
ExpiresByType application/x-javascript "access plus 1 years" 

应该工作

干杯 罗宾

答案 1 :(得分:7)

尝试将ExpiresDefault包裹在<filesMatch代码中,而不是使用ExpiresByType

<filesMatch "\.(js)$"> 
    ExpiresDefault A29030400 
</filesMatch>

答案 2 :(得分:1)

您可能需要从Apache主机配置中激活Expires模块。

在我的情况下,我添加了

  ExpiresActive On

在第一个ExpiresByType指令之前,它立即开始工作(在Apache重新加载之后)。

我不确定为什么需要明确启用它。在其他服务器上,一旦我使用a2enmod(可能使用Apache 2.2,但我无法找到清晰的模式)启用mod,它就会工作

答案 3 :(得分:0)

老问题,但这是我所学到的:

在浏览器中按 F12 (我使用的是Chrome),然后转到&#34; 网络&#34;选项卡并查找未缓存的JavaScript。在那里查找标题信息(例如,通过&#34;标题&#34;标签)并查看&#34; 内容类型&#34 ;在响应标题信息中。

就我而言,它是&#34; application / javascript &#34;,我没有在npm run webpack中具体定义。一旦我添加了该行:

{
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "webpack": "webpack"
  },
  "devDependencies": {
    "webpack": "^4.1.1",
    "webpack-cli": "^2.0.11"
  }
}

然后javascript按预期缓存。