摘要:大部分服务器端的框架会有一些工具来让这件事情变得简单,可是,这种方式并不适用于一些文章或者博客之类的网站,这些网站的不能通过版本号来管理,而且内容也是经常需要改变的。指不允许缓存。
本文译自: 这里
本文已同步到我的博客
引言
缓存利用得当的话,有很大益处,比如节省带宽,降低服务器压力等,但是很多网站没能够很好地利用缓存,造成一些相互依赖的资源出现不同步的情况。
关于缓存的处理方案主要可以分为以下两种:
方案一:资源内容保持不变+超长的max-ageCache-Control: max-age=31536000
这个url对应的资源永远保持不变
浏览器/CDN可以将该资源缓存很久
对于没有超过max-age的缓存内容可以直接使用,而不必再向服务器请求
如下图所示:
在这种情况下,一个url对应的资源应该是一直保持不变的,如果我们想更新资源,只能通过更改url的方式来实现:
可以看到,url中带有一串码,该码是与资源内容相关的,可以是版本号,修改日期,或者文件内容的hash值。
大部分服务器端的框架会有一些工具来让这件事情变得简单,
可是,这种方式并不适用于一些文章或者博客之类的网站,这些网站的url不能通过版本号来管理,而且内容也是经常需要改变的。
方案二:内容可变,每次都需要服务器再次校验(revalidated)Cache-Control: no-cache
这个url对应的资源是可变的
本地缓存只有在服务器验证过是最新的之后才可以使用
(译者注:可参照304场景)
如下图所示:
注意:no-cache并不是指不缓存,而是指在使用缓存之前,必须首先向服务器端确认资源是否为最新。
no-store指不允许缓存。同样的must-revalidate并非是指必须重新验证,它的意思是,只有当本地的缓存已经超过最长缓存时间时,才需要重新验证。
在这种场景下,可以在响应头中添加ETag或者Last-Modified。这样,当客户端在下次请求的时候,就会在请求头中带上这些信息,分别对应的是If-None-Match和If-Modified-Since。服务器端根据该标识判断资源是否为最新的,如果是,则返回304状态码。
这种设置总是会需要一次网络请求的(来验证本地的缓存资源是否为最新),因此相比于第一种方式,增加了网络请求。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/61958.html
摘要:可能会延长这些的寿命假设你有以下的这个缓存了和如果命中了缓存,就从缓存中取,否则发起网络请求如果我们更改了,我们会修改中的版本号,触发的更新。 本文翻译自:https://jakearchibald.com/201...这是一篇2016年的老文章。作者是Chrome浏览器的开发成员。 本文首发于公众号:符合预期的CoyPan 使用正确的缓存可以带来巨大的页面性能上的收益,节省带宽,减...
摘要:正在失业中的课多周刊第期我们的微信公众号,更多精彩内容皆在微信公众号,欢迎关注。若有帮助,请把课多周刊推荐给你的朋友,你的支持是我们最大的动力。是一种祸害译本文浅谈了在中关于的不好之处。浅谈超时一运维的排查方式。 正在失业中的《课多周刊》(第3期) 我们的微信公众号:fed-talk,更多精彩内容皆在微信公众号,欢迎关注。 若有帮助,请把 课多周刊 推荐给你的朋友,你的支持是我们最大的...
摘要:正在失业中的课多周刊第期我们的微信公众号,更多精彩内容皆在微信公众号,欢迎关注。若有帮助,请把课多周刊推荐给你的朋友,你的支持是我们最大的动力。是一种祸害译本文浅谈了在中关于的不好之处。浅谈超时一运维的排查方式。 正在失业中的《课多周刊》(第3期) 我们的微信公众号:fed-talk,更多精彩内容皆在微信公众号,欢迎关注。 若有帮助,请把 课多周刊 推荐给你的朋友,你的支持是我们最大的...
阅读 2005·2021-11-11 16:54
阅读 1017·2021-10-12 10:12
阅读 358·2019-08-30 15:43
阅读 613·2019-08-29 13:15
阅读 1052·2019-08-29 13:12
阅读 1491·2019-08-26 12:09
阅读 1635·2019-08-26 10:24
阅读 2202·2019-08-26 10:15