最近有同学问我,同一个网站为什么要把主页面和静态资源(图片等)放置在不同域名下(可能解析的相同的服务器,也可能不同)。这么做的用意是什么呢?且听在下慢慢道来~
1. 突破浏览器并发限制
浏览器针对同一个域名内资源请求的并发数量有限制( 为了防止DDOS攻击。),且不同浏览器对同一个域名下的静态资源并发加载的数量不同 ,若超出最大限制数,超出的请求会被阻塞。浏览器会等待前面的资源下载完毕,然后复用前面连接的 tcp 发起后续的请求。
下面是一些常见浏览器的请求并发数:
Chrome34/32 | 6 |
IE10 | 8 |
IE11 | 13 |
Firefox27/26 | 6 |
Safari7.0.1 | 6 |
可想而知,如果我们将静态资源放到另外一个域名上,和主页面区分开,就可以突破浏览器的请求并发数限制,减少网页加载时间。不仅仅可以提高同时请求的数量,还能减少主域名下的请求,达到减少网页白屏时间或者DCL、L时间的效果。
2. 节省 cookie 带宽
Cookie 是紧跟域名的。同一个域名下的所有请求,都会携带 Cookie。可想而知,如果我们所有资源都在一个域名下,那么加载那些静态资源也会带上cookie,很明显加大了请求成本。
大部分情况下,对于静态资源的请求是不需要携带cookie的,比如浏览图片、视频等信息。而与主域名不同就不会自动携带cookie,所以我们可以通过将静态资源放在另一个域名上来避免携带cookie,节省了请求带宽。
3. 更方便 CDN 缓存
将静态内容和动态请求存放在不同服务器上,更加方便进行 CDN
请求。
4. 域名收敛
- 域名发散
域名发散是指将静态资源放在多个子域名下,就可以多线程下载,提高并行度,使客户端加载静态资源更加迅速。即本文讨论内容,主页面和静态资源要置于不同的域名下
- 域名收敛
域名收敛是指将静态资源放在一个域名下。减少DNS解析的开销。
由于浏览器解析DNS也需要花费时间,太多域名会导致解析时间过长,访问速度反而过慢了。
所以我们需要控制页面中出现的域名数。一般来说,主站+CDN两个域名比较合理。