七牛cdn缓存更新时间失效需要至少10分钟,机制和原理

2014年9月30日 发表评论 阅读评论

七牛的服务器端文件被更新,比如图片文件,更新后,不一定会在客户端立即生效,需要一段时间的,大概需要10分钟左右,因为七牛在各地的cdn节点不一定会实时更新。核弹大爆炸论坛启用七牛cdn后感觉到这种效果的。

刚刚重新测试了下至少一天!

浏览器缓存

用户从浏览器(或者 App 客户端)请求一个 URL 时,浏览器首先会判断该资源曾经是否被请求过是否被缓存过,如果该资源在客户端被缓存了,就会直接返回给客户端。这是浏览器的缓存。目前七牛云存储会在输出每个资源时输出 Cache-Control: public, max-age=31536000ETag: FsODI_568V_-16UxMM7JzqyS2Hx0 这样的头部来进行缓存控制。该 Cache-Control 头部表示该请求可以在客户端缓存一年时间,31536000 为秒,表示从当前时间开始的相对时间,在该时间内访问同一个 URL,浏览器不会再次向服务端请求,而是会直接将浏览器缓存中的资源返回给客户端用户。ETag是该资源在服务器端的 “指纹”。当请求头部的 Cache-Control 时间过期之后,浏览器会向服务端发送请求新文件的新请求,该请求会带上这个 Etag 做验证,判断所请求的资源在服务端是否确实有变化。值得注意的是,由于 Cache-Control 设置的时间为一年,当服务端有更新时,需要在浏览器强制刷新浏览器才可能发送验证 Etag 的请求。

CDN 缓存

用户从浏览器请求一个七牛云存储上的资源后,七牛云存储会将其分发到离用户最近的 CDN 节点上缓存下来,用户访问到的时 CDN 上的资源。用户下次再次向七牛的服务端请求的时候,访问到的还是 CDN 缓存中的资源。因此,资源在七牛的服务端更新之后,不一定能够立即反馈到客户端。

目前,我们的做法是,在七牛存储上的资源更新之后,需大约 10 分钟左右时间让 CDN 上的缓存失效。用户可在 10 分钟后看到最新的资源。如果 10 分钟后客户端还没看到缓存更新,可以先排查下客户端的浏览器缓存是否已经失效,如果没有失效可以采用强制刷新的形式来访问最新资源。

如果浏览器端强制刷新也无效,可能是因为当前 CDN 节点中的该缓存尚未失效(这种情况很少见)。要确认 CDN 缓存是否过时,可以在 URL 后面加上版本参数的形式来让 CDN 强制刷新,比如 http://ikbear.qiniudn.com/iphone.jpg?v=20130910。CDN 拿到这个 URL 后会强制回七牛的存储中取回最新的资源。这种加版本的方法仅用于验证 CDN 缓存是否失效,要想正确使用版本的方法管理 CDN 缓存,参见下面的 “CDN 缓存最佳实践” 一节。

如果确认 CDN 缓存比较旧,可以使用我们的管理后台https://portal.qiniu.com/ => 选择一个空间 => 空间设置 => 高级设置 => 缓存刷新 来进行缓存的强制刷新。

CDN 缓存最佳实践

我们整理了 CDN 缓存相关的最佳实践:

相关PDF

供参考。


转载请注明来自:[MSN Spaces]http://msn.shandian.biz/810.html

  1. 本文目前尚无任何评论.