今天在 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
参考
- Best Practices for Speeding Up Your Web Site
- Performance Research, Part 4: Maximizing Parallel Downloads in the Carpool Lane
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式