浏览器请求与域名的关系
在最近的面试中被问到了这样一个问题:
百度搜索的图片资源来自跟百度不同的域名 imgstat.baidu.com, 原因是什么,这样做有什么好处。
平时这方面不太注意,一时半会答不上来,回来之后照着这个问题在网上学习了一下, 好处有以下:
1. 不必每次请求都携带cookie 信息 -- cookie free。
说明: 按照传统的方式,假设网站的 cookie 信息有 1kb, 如果网站上有150个资源的时候,则请求的过程中需要携带 1kb * 150 = 150kb 的数据。多多少少会对速度造成影响。而且这个信息在请求js/css/img/flash 这些静态资源上,几乎是没有必要的。解决方案是启用和主站不同的域名来放置静态资源。
2. 多个域名可以加大并发数 ( 因为浏览器对一个同一个域名的请求并发数量是有限制的 )
比如,某个浏览器对一个域名的并发数是6, 如果我们设置n个服务器域名,那么并发数可以达到 6n,但是n 也不宜过多。
说明:
将css放置在页面最上方应该是很自然的习惯,但第一个css内引入的图片下载是有可能堵塞后续的其他js的下载的。而在目前普遍过百的整页请求数的前提下,浏览器提供的仅仅数个并发,对于进行了良好优化甚至是前面有CDN的系统而言,是极大的性能瓶颈。 这也就衍生了domain hash技术来使用多个域名加大并发量(因为浏览器是基于domain的并发控制,而不是page),不过过多的散布会导致DNS解析上付出额外的代价,所以一般也是控制在2-4之间。 这里常见的一个性能小坑是没有机制去确保URL的哈希一致性(即同一个静态资源应该被哈希到同一个域名下),而导致资源被多次下载。
答案内容来自知乎:
作者:黄良懿
链接:https://www.zhihu.com/question/20474326/answer/15696641