Web 技术研究所

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

代理服务器也合并请求?

  在使用国内的各种 CDN 时遇到了不少问题,其中一个比较坑的点是这些 CDN 节点不会合并 GET 请求。也就是说,如果一个资源没有缓存,瞬时的并发过高就会导致这些请求全部都瞬间打到源站上。而使用 CDN 的一个目的就是避免源站的压力,这么一来 CDN 的可用性就大打折扣了。
   浏览器对 GET 请求的处理是有合并机制的,即使同时打开多个网页,只要是针对同一个资源的 GET 请求并且没有命中 Vary 头字段的差异都可以共享这个资源。也就是说,同时打开 10 个页面,这个页面上请求了一个 10MB 的图片,那么实际上对这个图片的请求只会发起一次。只有第一次访问是真正的发起,后续的访问都只是共享了第一次的成功结果而已。如果第一次请求是失败的则所有请求都失败掉。
  这个逻辑是没问题的,在 HTTP 中除非指明 Vary 头字段,否则字段的差异不会被认为是资源的差异。无论是用户代理还是服务代理都可以使用这个机制。
  虽然 nginx 并没有实现这个逻辑,但一些其它更专业的 HTTP 代理和缓存服务器上是有这个逻辑的,比如 varnish。
  似乎国内的 CDN 很少会用 varnish,大家都使用了奇奇怪怪的技术来实现,导致了各家 CDN 的差异巨大。也许大家都只是拿 CDN 做「静态资源加速」,所以不会纠结太多细节的实现差异。如果需要依赖 CDN 的细节特性来实现某些东西就会踩到无数多的坑。
网名:
54.146.176.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^