Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

CDN 的技术细节差异

  CDN 虽然只是一个静态资源的缓存和代理,但每家 CDN 提供商的技术细节都不一样。如果对 CDN 提供商不信任,希望同时使用多个 CDN 提供商应对突发事件的话,在多个 CDN 技术细节上做兼容也是一件很难受的事。这些技术细节由于没有规范,大家都有自己的玩法。
  比如目前腾讯云 CDN 将 https 和 http 视为同一份缓存,我有一个强制从 http 跳到 https 的需求就很难实现。因为如果服务器判断请求来自 http 并做跳转,这个响应就会被缓存,之后即便是 https 访问也会命中这个缓存,造成前端页面进入鬼畜状态。
  七牛云 CDN 可以设置忽略 QueryString,也就是不管 QueryString 的值是什么都使用同一份缓存。这对于一些前端路由(URL 指向同一份资源,前端解析 QueryString 调用 API 获取数据)是非常友好的。当并不是所有 CDN 都提供忽略 QueryString 的配置项,所以带有 QueryString 如果在哪些不支持的 CDN 上就会产生大量的数据冗余。虽然 CDN 上的存储空间是不收费的,但如果哪天需要手动清 CDN 缓存就办不到了。于是有时候为了可以在多个 CDN 之间切换,我们只能使用 URL Hash 的方式来实现前端路由。
  缓存策略也是个很复杂的东西。实际上对于 CDN 而言缓存分类两种,一种是 CDN 告诉浏览器要缓存多久,另一种是资源在 CDN 上要缓存多久。如果是自有源的 CDN,我们可以使用 max-age 和 s-maxage 对着两种缓存做不同的设置。但如果是一些托管的对象存储服务,或者是 CDN 自带的缓存策略设置,它们都只考虑了 max-age,从来不会考虑 s-maxage。
  除了 CDN 本身之外,CDN 提供的 API 不一样也是坑。比如一些图片压缩的参数格式、WebP 的支持。如果前端依赖了某个 CDN 的这些东西,那要再去做多 CDN 服务商之间的切换就会很困难。
  我只想说,没有规范的东西都是坑。。。
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^