为什么静态资源放置于一个或者多个独立域名之下

为什么静态资源要放在一个或者若干个独立的域名之下?我当时脑海中首先想到的就是为了动静分离,减轻web服务器压力,但是仔细一想不太对,如果仅是为了这个原因,大可不必启用那么多一级域名,用若干二级域名不是更好?于是带着这个疑问,拜访了搜索引擎。果然不出所料,原因不止这一个,现整理出来,作为备忘。

查看了淘宝的官网


为什么静态资源放置于一个或者多个独立域名之下_第1张图片
image.png

为什么静态资源放置于一个或者多个独立域名之下_第2张图片
image.png

1、启用新的一级域名,每次请求浏览器不会携带cookie。这对于cookie内容比较大,并且流量大的网站会省去不少宽带费用。同时这也解惑了为什么不用二三级域名。

2、动静分离。静态资源与动态内容分离,有利于部署于CDN。

3、HTTP协议对同一个域名的同时下载线程数有限制。主要是为了优化下载速度,防止同一域名下下载线程数过多,导致下载速度变慢。各个浏览器都会遵守这个规定,但是限制的数目可能不一致。基于这个原因,可将资源部署于不同的域名,以达到最大化并发下载。(重点)

浏览器的并发请求数目限制是针对同一域名的。
意即,同一时间针对同一域名下的请求有一定数量限制。超过限制数目的请求会被阻塞,这就是为什么会有zhimg.com, http://twimg.com 之类域名的原因。
(这是其中一个原因,另一个主要原因是,向 http://zhihu.com 请求资源会把 http://zhihu.com 下本地的所有 cookie 发送过去,这是请求图片,js等资源不需要的,会造成很大的浪费,详情见http://webmasters.stackexchange.com/questions/26753/why-do-big-sites-host-their-images-css-on-external-domains)

为什么静态资源放置于一个或者多个独立域名之下_第3张图片
image.png

如图,有的请求会持续很长时间,如果把 img, css, js... 都放到 http://zhihu.com 一个域名下面,其他请求就迟迟无法完成,浏览者看来就是『卡住了』。而把图片放到 http://zhimg.com 之后,css和图片就可以并发请求了。

具体不同浏览器这个限制的数目


为什么静态资源放置于一个或者多个独立域名之下_第4张图片
image.png

4、静态资源独立部署,为全局产品服务。这属于业务划分的范畴了。比如taobao.com和tmll.com都会用到tbcdn.cn上的静态资源,这些资源不必从属于某个产品。

5、接第4点原因,有利于最大化利用客户端缓存。比如访问taobao.com,缓存了tbcdn.cn上的某个js文件,之后再访问tmll.com时,也用到此js文件,不必再从tbcdn.cn上下载,直接用客户端缓存即可。

最后,这样做的同时,就已经减轻了每台服务器的压力,服务器越多,每个服务器压力就越小。当然,这需要一个平衡。

参考文献:
http://blog.csdn.net/u010552788/article/details/51056554
https://www.zhihu.com/question/20474326

你可能感兴趣的:(为什么静态资源放置于一个或者多个独立域名之下)