网站 CDN 采用不同域名的好处

更新日期: 2020-05-09 阅读次数: 12200 字数: 466 分类: CDN

今天在 v2ex 上看到一个好问题, 类似知乎等的图片服务域名采用 zhimg.com 而不是 img.zhihu.com,有什么优点吗

即,为何优秀的产品通常采用独立的域名做 CDN,例如 Yahoo 的 yimg.com, YouTube 的 ytimg.com, Amazon 的 images-amazon.com.

CDN 采用与主站不同域名的优点

  • 跨域不会传递 cookie,高并发时可以有效减少网络流量,提高性能
  • 浏览器对同一个域名有并发限制
  • 国内的话可能有一部分监管的原因,如果有一个子域名下出现不和谐内容可能导致整个挂掉,用不同主域名可以规避这样的问题

CDN 采用与主站不同域名的缺点

  • 多了一次 DNS 解析的耗时 (在没有预解析及缓存的情况下,一次 DNS 解析需要耗时 20~120 毫秒, 在解析完成前, 啥也下载不了)
  • 增加了一次 TCP 握手

DNS 解析在移动网络下耗时长,且存在解析不准确(比如跨运营商)的情况, 多一次解析,多一份风险。

最佳实践

  • 使用 2 ~ 4 个域名

跨越是否传递 cookie 的补充

  • 如果是在主域设置了 cookie,例如 sunzhongwei.com, 那么 wiki.sunzhongwei.com, quote.sunzhongwei.com 等二级域都能收到 cookie
  • 如果是二级域名设置了 cookie,例如 www.sunzhongwei.com, 那么 wiki.sunzhongwei.com, quote.sunzhongwei.com 等二级域则收不到 cookie
  • 如果主域不同,则 cookie 不会传递。例如 trello.com 不可能获得 sunzhongwei.com 的 cookie
  • 如果在主域设置了 cookie,例如 sunzhongwei.com, 那么使用 CNAME 将 qiniu CDN 的域名 sunzhongwei.qiniudn.com 指向 cdn.sunzhongwei.com 是否会造成 cookie 的传递?不会的,因为 CNAME 会被 DNS 解析成目标域名,即七牛的域名,浏览器只认最终的域名。参考 Accessing session cookies across domains with CNAME

参考

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式