通过Google页面速度测试运行我的网站时,它说我需要“利用浏览器缓存 在HTTP标头中为静态资源设置到期日期或最长期限,指示浏览器从本地磁盘而不是通过网络加载以前下载的资源。“
然后它列出了我的内部Javascript文件,为什么以下不起作用并修复此问题?
这是htaccess文件的外观:
## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##
<FilesMatch "\\.(js|css|html|htm|php|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl|jpg|png|gif)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>
谢谢
答案 0 :(得分:0)
Javascript的官方mime类型为application/javascript
,请尝试此操作。
来源http://www.rfc-editor.org/rfc/rfc4329.txt
x-
代表“实验性”,不再与Javascripts一起使用。
所有这些组合都已弃用,已过时或过时:
text/x-javascript
text/javascript
application/x-javascript
application/ecmascript
您的配置中有更多错误的mime类型:
错误:image/x-icon
右:image/vnd.microsoft.icon
来源:http://www.iana.org/assignments/media-types/image/vnd.microsoft.icon
错误:application/x-pdf
右:application/pdf
答案 1 :(得分:0)
您已指定text / x-javascript类型的文件应该是可缓存的,但您是否告诉网络服务器如何识别此类文件?正如DanFromGermany所说,mimetype确实应该是application/javascript但是在你的网络服务器中,这只是一个随意的标签。您的网络服务器可能已经配置为将以.js
结尾的文件识别为javascript,在这种情况下,只需更改mod_expires块中的相应行即可。您可以在firebug,iehttpheaders中看到webserver返回的mimetype,使用wireshark监视连接或使用命令行中的wget / curl。
如果您的网络服务器返回application/javascript
或text/x-javascript
以外的其他内容,请检查包含您的apache配置的目录中mime.types
文件中的条目。
答案 2 :(得分:0)
检查您的托管配置。 我正在使用Cpanel的“SuperCacher服务”: 静态缓存 动态缓存 内存缓存
他们覆盖了我的.htaccess设置并导致了这个问题。 一旦我禁用它们,问题就会消失。