最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
关于浏览器页面缓存的浅析
时间:2022-06-25 14:37:59 编辑:袖梨 来源:一聚教程网
一个页面上的资源,可以简单分为两种:
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"
相关文章
- 云星穹铁道权益升级怎么玩 云崩铁权益升级活动介绍 12-03
- 以闪亮之名山中绘梦怎么玩 以闪亮之名滢然花梦套装活动介绍 12-03
- 以闪亮之名绿野梦歌礼包怎么样 以闪亮之名绿野梦歌拍照礼包介绍 12-03
- 光遇12.6有什么更新 光遇12月6日更新内容介绍 12-03
- 伍六七暗影交锋测试资格怎么获得 伍六七暗影交锋内测资格获取方法 12-03
- 无限暖暖晶莹诗集怎么样 12-03