设置缓存过期时间?

27

我用Chrome测试了我的网站并得到以下建议:

The following resources are missing a cache expiration. Resources that do not specify an expiration may not be cached by browsers:
style.css
jquery.marquee.js
jquery.marquee.css
logo.png

我该如何设置这些文件的缓存过期时间?

3个回答

18

设置缓存过期时间的一种方式是使用 .htaccess 文件。

以下代码将为各自的文件类型设置过期时间,例如,对于 CSS 文件,过期时间为 14 天。

<IfModule mod_expires.c>
   ExpiresActive on
   ExpiresDefault "access plus 1 month"
   ExpiresByType application/javascript "access plus 1 year"
   ExpiresByType image/x-ico "access plus 1 year"
   ExpiresByType image/jpg "access plus 14 days"
   ExpiresByType image/jpeg "access plus 14 days"
   ExpiresByType image/gif "access plus 14 days"
   ExpiresByType image/png "access plus 14 days"
   ExpiresByType text/css "access plus 14 days"
</IfModule>

1
有没有办法在我想要的时候(例如更新后)清除这些缓存? - Reign.85
3
你无法强制浏览器清除缓存。你可以使用文件版本控制,例如将style.css更改为style.css?v1.1或重命名文件来解决此问题。 - Shankar Prakash G
如果我从.htaccess中删除了那段代码,浏览器是否会获取最新版本的文件,而无需重命名文件(或使用版本控制)? - david_nash
不需要版本控制,因为浏览器会从缓存中获取上一次的文件,所以不会向服务器请求该文件。只有当缓存过期或进行强制刷新(CTRL + F5)时,浏览器才会从服务器请求该文件。 - Shankar Prakash G

16

1

如果这个问题涉及到缓存Tomcat应用程序目录中的JavaScript或CSS,您可能需要查看/conf/web.xml文件。

通常在此处提供的MIME映射为:
<mime-mapping>
   <extension>js</extension>
   <mime-type>application/javascript</mime-type>
</mime-mapping>

在Apache中,默认指令是
   ExpiresByType text/javascript "access plus <specify your timeframe>"

您可以将Apache指令更改为application/javascript,或更改Tomcat MIME映射为text/javascript,这将设置缓存过期时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接