一直不太理解为什么大型网站静态资源都要使用独立的二级域名,今天特地研究了一下,主要原理分为以下三点
-
浏览器并发请求数的限制
-
浏览器对并发请求的数目限制是针对域名的,即针对同一域名(包括二级域名)在同一时间支持的并发请求数量的限制。如果请求数目超出限制,则会阻塞。因此,网站中对一些静态资源,使用不同的一级域名,可以提升浏览器并行请求的数目,加速界面资源的获取速度。
一些主流浏览器对HTTP 1.1和HTTP 1.0的最大并发连接数目,可以参考如下表格:
浏览器 HTTP / 1.1 HTTP / 1.0 IE 11 6 6 IE 10 6 6 IE 9 10 10 IE 8 6 6 IE 6,7 2 4 火狐 6 6 Safari 3,4 4 4 Chrome 4+ 6 6 Opera 10.51+ 8 ?
-
-
Cookie
- 当浏览器向服务器请求一个静态资源时,会先发送同域名下的 cookie,对于静态资源服务器不会对这些cookie做处理,浪费带宽
- 假设网站cookie信息有1 KB、网站首页共150个资源时,用户在请求过程中需要发送150 KB的cookie信息,在512 Kbps的常见上行带宽下,需要长达3秒左右才能全部发送完毕。很多情况下cookie的path是在整个一级域名下可用的,如果你把静态资源设置成二级域名,那么它也避免不了cookie。例如如果给 126.com 设置了cookie,那么会感染所有子域名, 请求 www.126.com/logo.gif或者h… 时便会带上讨厌的cookie。所以对于静态资源使用单独的域名,并设置为无cookie,以减少请求大小,提高网页性能。
-
方便分流或缓存
- 我们知道,当面对大并发访问时,在服务端会有相应的缓存机制,例如我们会在CDN中缓存一些静态资源,以便用户可以通过就近的网络节点获取资源。
- 此外,独立的域名也方便我们在代理服务层做动静分离,以便提升静态请求的处理速度。