为什么同一个网站的资源存在于多个不同的域名中
上周加班的时候和问总监为什么项目分了很多不同的域名进行跳转的问题,总监跟我解释说一个网站的加载会有很多的资源,其中最大的就是图片类似的资源了,如果把这些加载资源的请求都放在同一个域名进行请求的话,那么一旦访问量激增,这个域名对应的服务器对应的接口肯定处理不多来,速度就会变得很慢,所以需要把一些图片资源和一些静态的文件资源放在不用的服务器中,为其配置不同的域名,这样的话可以大大降低资源请求的并发量,提高相应效率。
网站资源采用多个域名具有以下多个好处
- 更方便CDN缓存
- 将静态内容和动态请求分别存放在不同服务器上,更加方便进行CDN缓存。
- 突破浏览器并发限制
- 每个浏览器都具有一个并发浏览请求数,表示的是同一时刻对于同一个域名下的请求数有一定的限制,超出这个限制后的请求将不被接受,直到等到有空闲连接数,访问速度就会降低
- 并发连接请求数
- 节省 cookie 带宽,因为在很多时候,对于页面资源的请求我们是不需要携带用户 cookie 的,比如浏览图片,视频等信息,而用户登录时才需要用户 cookie 信息,此时就可以选择将图片,视频等资源放在专门存放静态资源的域名下,节省在发送请求时,传递 cookie 需要的带宽。关于 cookie 的问题,带宽是次要的,安全隔离才是主要的。
- 节省主域名连接数,一般用户在访问网站的时候会访问主域名对应的网页,根据之前提到的浏览器并发连接数,对应主域名页面的访问连接就显得尤为珍贵,如果将不同的资源放在不同域名下,则可以节省主域名连接数,从而能优化页面的访问速度。
- 对于 UGC 的内容和主站隔离,防止不必要的安全问题( 上传js窃取主站cookie之类的) 。 正是这个原因要求用户内容的域名必须不是自己主站的子域名,而是一个完全独立的第三方域名。
- 数据做了划分,甚至切到了不同的物理集群,通过子域名来分流比较省事。
注意:并非同一个网站资源在越多的域名下就越好,原因有两点:
- 因为浏览器在做DNS解析时也会花费时间,太多的域名会导致解析时间过长,访问速度变慢。
- 如果域名采用的是HTTPS协议,则需要安装更多的证书,在部署时也存在一定的问题,加大了操作难度。