一个页面上的资源,可以简单分为两种:
url 可变,比如这个页面上的 css 文件,这次可能是 app.fe5a24f8ae.css,下次可能是 app.613e5f58f1.css
url 不可能变,比如这个页面的 url
针对它们,我们的缓存方式可以不同。
比如第一种,我们可以这样设置响应头:
Cache-Control max-age=31536000, must-revalidate
表示这个资源一年内都有效,过期的话才要到服务器上验证。
那么,我们如何保证资源修改后能及时更新到用户端?修改 url 即可。
而针对第二种,因为 url 无法改变,我们就需要另外的方式。
比如:
Cache-Control no-cache
no-cache 不是表示不能缓存,而是说每次浏览器都要跟服务器做个确认 – 通过 ETag 或 Last-Modified,这样就会多出一个请求 。
对于 HTML 文档谨慎设定过期时间
大部分情况下,对于其他图片、CSS、JavaScript 等资源的请求都来自一个单一的 HTML 文档。对于这类页面通常应该设定比较短的过期时间,或者干脆不设定。因为如果这类页面被缓存,那么页面中包含的资源的文件名等等信息都会一并被缓存,导致对它的更新难以确保立即对用户生效。
引用静态资源时,不要使用 Query String
Query String 就是例如?key=val的字符串,如
这会阻止一部分较老的浏览器(包括 IE6 )对该资源进行缓存。
设定缓存的方法
对于 Apache 服务器,可以通过 mod_expires 模块来设定ExpiresHTTP 头或Cache-ControlHTTP 头的max-age指令。编辑相应目录下的 .htaccess 文件,或直接对 Apache 的配置文件(根据服务器系统版本不同,可能为httpd.conf或apache2.conf等)作出修改。
分文件类别设定
使用ExpiresByType可以按照文件的 MIME Type 设定某一类文件的过期日期。例如:
ExpiresActive On
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/javascript "access plus 2 weeks"
ExpiresByType image/x-icon "access plus 6 months"
ExpiresByType image/gif "access plus 6 months"
ExpiresByType image/png "access plus 6 months"
ExpiresByType image/jpeg "access plus 6 months"
ExpiresByType video/x-flv "access plus 6 months"
ExpiresByType application/pdf "access plus 6 months"
其中access plus 1 week表示将缓存过期设置为访问时间(即当前时间)之后的一周。如果将access替换为modification,则缓存过期会被设定为文件修改时间之后的一周。可以使用的时间单位包括:
years
months
weeks
days
hours
minutes
seconds
不同的时间也可以进行组合,例如:
ExpiresByType text/html "access plus 1 month 15 days 2 hours"
ExpiresByType image/gif "modification plus 5 hours 3 minutes"
根据文件扩展名进行设置
如果希望根据扩展名来指定缓存规则,可以使用FilesMatch配合正则表达式。为了简洁,我这里只规定了ExpiresDefault。它的优先级很低,只会在对应文件没有任何其他规则能够匹配(包括上层目录下的缓存规则)时生效。
ExpiresActive on
ExpiresDefault "access plus 1 week"
对某些文件设定
同理,也可以对某些文件启用特定的缓存策略。注意,文件名中的点(.)是需要转义的。
ExpiresActive on
ExpiresDefault "access plus 1 week"
对某一文件夹下的所有文件设定
对于静态文件,一个比较方便的做法是将它们全部放到一个目录下,并对该目录下的所有文件设定。但是,此处需要注意防止其他规则将ExpiresDefault覆盖掉。
ExpiresActive On
ExpiresDefault "access plus 10 years"
敢达决战官方正版 安卓版v6.7.9
下载敢达决战 安卓版v6.7.9
下载像素火影骨架佐助 (Perseverance Fire Shadow)手机版v1.16
下载要塞英雄 安卓版v33.20.0-39082670-Android
下载梦想城镇vivo最新版本 安卓版v12.0.1
梦想城镇vivo版是这款卡通风模拟经营类手游的渠道服版本,玩
怦然心动的瞬间 安卓版v1.0
怦然心动的瞬间是一款真人向的恋爱互动游戏,在游戏中玩家将扮演
曼尼汉堡店游戏 安卓版v1.0.3
曼尼汉堡店是一款非常好玩的精品恐怖类型冒险游戏,在这款游戏中
现代总统模拟器去广告版 安卓版v1.0.46
现代总统模拟器是一款休闲养成类游戏,可能对于不少的玩家来说都
现代总统模拟器付费完整版 安卓版v1.0.46
现代总统模拟器高级版在商店是需要付费的,相对于普通版本,高级