我注意到,就在去年左右,许多主要网站都对其页面结构进行了相同的更改。每个人都将他们的 Javascript 文件从托管在与页面本身(或其子域)相同的域上移至托管在不同名称的域上。
这不仅仅是并行化
现在,有一种众所周知的技术可以将页面组件分布到多个域以并行下载。 雅虎和许多其他人一样推荐它。例如,www.example.com是托管 HTML 的地方,然后您将图像放在images.example.com上,将 javascripts 放在scripts.example.com上。这绕过了这样一个事实,即大多数浏览器都会限制每台服务器的同时连接数,以便成为优秀的网民。
以上不是我要说的。
它不仅仅是重定向到内容交付网络(或者可能是——见问题的底部)
我所说的是专门在一个完全不同的域上托管 Javascript。让我具体一点。就在去年左右,我注意到:
youtube.com已将其 .JS 文件移至ytimg.com
cnn.com已将其 .JS 文件移至cdn.turner.com
weather.com已将其 .JS 文件移至j.imwx.com
现在,我知道像Akamai这样专门为大型网站外包的内容交付网络。(特纳的特殊领域中的名称“cdn”让我们了解这个概念在这里的重要性)。
但请注意这些示例,每个站点都有自己为此目的专门注册的域,而不是内容交付网络或其他基础设施提供商的域。事实上,如果您尝试从这些脚本域中的大多数加载主页,它们通常会重定向回公司的主域。如果您反向查找所涉及的 IP,它们有时似乎指向 CDN 公司的服务器,有时则不是。
我为什么在乎?
以前在两家不同的安全公司工作过,我对恶意 Javascript 感到偏执。
因此,我遵循将允许 Javascript(和其他活动内容,如 Java)在其上运行的站点列入白名单的做法。因此,要使cnn.com这样的网站正常运行,我必须手动将cnn.com放入列表中。这是背后的痛苦,但我更喜欢它而不是替代方案。
当人们使用像scripts.cnn.com这样的东西来并行化时,使用适当的通配符可以很好地工作。当人们使用 CDN 公司域之外的子域时,我可以只允许 CDN 公司的主域在前面加上一个通配符,然后用一块石头杀死许多鸟(例如 *.edgesuite.net 和 *.akamai.com)。
现在我发现(截至 2008 年)这还不够。现在我必须在我想列入白名单的页面的源代码中四处寻找,并找出该站点用于存储其 Javascript 的“秘密”域(或域)。在某些情况下,我发现我必须允许三个不同的域才能使站点正常工作。
为什么所有这些主要网站都开始这样做?
编辑:好的,正如“onebyone”所指出的,它似乎与内容的 CDN 交付有关。所以让我根据他的研究稍微修改一下这个问题......
为什么weather.com使用j.imwx.com而不是twc.vo.llnwd.net?
为什么youtube.com使用s.ytimg.com而不是static.cache.l.google.com?
这背后一定有道理。