在单独的域上托管静态资源有什么好处?


24

我注意到许多站点将资源托管在与主站点不同的域中,例如,使用sstatic.net的StackExchange,使用imagesbn.com的Barnes&Noble等。

我知道,将静态资源放在单独的主机上可能有好处,可以使用高效的静态文件Web服务器(例如nginx),释放主服务器以专注于提供动态内容。同样,外包到像Cloudfront Akamai这样的共享CDN也是合乎逻辑的。

但是,否则使用单独的域有什么好处呢?为什么选择sstatic.net而不是static.stackexchange.com?

更新:几个答案错过了核心问题。我知道在多个主机之间进行拆分(并行下载,更薄的Web服务器等)是有好处的。但是,更难理解的是为什么要使用多个。为什么以sstatic.net而不是static.stackexchange.com作为共享资源的主机?到目前为止,只有一个答案可以解决这个问题。

Answers:


22

许多站点都设置了很多cookie,这些cookie的目的是支持某种状态。

通过将静态(无状态)资源放在完全不同的域中,可以减小http请求的大小。在某些情况下,cookie太多了,以至于单个http请求需要两个TCP数据包进行传输。因此,拥有单独的域是减少请求页面各个部分的数据包数量的方法之一。

具有相同目标的其他方法是将大量图像合并到一个精灵中,并将所有Javascript合并到一个文件中。


23

除了使用CDN之外,对静态数据使用单独的域还意味着:

  1. 您可以使用轻量级的Web服务器,而不必在每个单个请求上加载动态内容Web服务器必须加载的所有模块/扩展。不必扫描URI路径中的每个目录以读取.htaccess文件,也可以增加服务器可以处理的同时请求数。

  2. 添加额外的子域意味着您将增加浏览器可以执行的并行下载的数量。

  3. 如果设置正确(例如,您的网站托管于www.example.com而不是example.com),您还可以利用无cookie子域,从而减少流量和往返时间。

唯一的缺点是,如果您使用SSL会话,则需要一个签名证书并为其他域使用单独的静态IP。但是,在大多数情况下,好处多于这种不便之处。

编辑:

抱歉,我看不懂你的问题。如果您问为什么有些人使用单独的SLD,则可以通过#3的括号来回答。在sstatic.net上也有解释:

如果您的域名是www.example.org,则可以将静态组件托管在static.example.org上。但是,如果您已经在顶级域名example.org而不是www.example.org上设置了cookie,则对static.example.org的所有请求都将包含这些cookie。在这种情况下,您可以购买一个全新的域,在其中托管静态组件,并使该域保持无Cookie状态。雅虎!使用yimg.com,YouTube使用ytimg.com,亚马逊使用images-amazon.com等。

但是化身还提到了在运行共享某些资产的大型站点网络时,使用单独的通用SLD而不是现有SLD的子域的好处。

最后,正如Niels Basjes指出的,消除Cookie的部分原因是为了最大程度地减少用于执行请求的数据包数量。我认为YSlow指南指出大多数网络的最大数据包大小为1500字节,因此将其保持在1500字节以下将减少TCP开销。这也说明了使用sstatic.net代替的另一个优势static.webmasters.stackexchange.com


为什么需要一个单独的IP?
Mihalis Bagos,2012年

2
因为传统上加密是在发送域名之前应用的。减轻这种情况的SNI尚未得到普遍支持-您将在XP上排除IE。
phihag 2012年

@Mihalis:只需添加到phihag的评论中,您还可以排除Windows Mobile 6.5和更早版本,Android 2.x和更早版本,Blackberry Browser,XP上的Safari ...支持的/不支持的软件的完整列表可以在此处找到:en.wikipedia.org/wiki/Server_Name_Indication#No_support
2012年

3
我不是在问为什么要使用多个子域-这对我来说很有意义。我要问的是单独的完整域。为什么选择sstatic.net而不是static.stackexchange.com?
Michael Ekstrand

5

Lèsemajesté涵盖了要点,但要进一步扩展,我要补充说,为所有各种Stack Exchange网站拥有一个域意味着浏览它们的人只会下载一次静态内容,例如JavaScript。例如,进入超级用户后,用户将使用缓存的内容,因为它来自同一位置。

YahooGoogle上有一些与此有关的更有用的信息。


5

主要原因是cookie。Niels在他的回答中建议的只是一个很小的后果,而不是真正的原因。如果不使用cookie,则请求大小会较小,因此可以节省一些带宽。

但是,真正的区别来自浏览器缓存。由于内容是静态的(即不变),因此浏览器可以将其缓存在本地硬盘上,并且避免每次都从Internet加载文件。Web服务器仅发送304答复,而不是整个文件,这意味着内容未更改。

当站点使用cookie时,浏览器会认为文件的内容对于不同的用户可能会有所不同,因此它们不会缓存这些文件。从无cookie的域提供文件可确保浏览器缓存正常工作。

这是主要原因,因为它可以缩短加载时间并显着减少带宽。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.