为什么要将Javascript文件移动到您还拥有的其他主域?

为什么要将Javascript文件移动到您还拥有的其他主域?,javascript,webserver,cdn,provisioning,whitelist,Javascript,Webserver,Cdn,Provisioning,Whitelist,我注意到,就在过去的一年左右,许多主要网站的页面结构也发生了同样的变化。每个人都将其Javascript文件从与页面本身(或其子域)托管在同一个域上转移到了另一个名称不同的域上 这不仅仅是并行化 现在,有一种众所周知的技术,将页面的组件分散到多个域中,以并行下载。和其他许多人一样。例如,www.example.com是HTML的宿主,然后将图像放在images.example.com上,将javascripts放在scripts.example.com上。这回避了一个事实,即大多数浏览器限制每台

我注意到,就在过去的一年左右,许多主要网站的页面结构也发生了同样的变化。每个人都将其Javascript文件从与页面本身(或其子域)托管在同一个域上转移到了另一个名称不同的域上

这不仅仅是并行化 现在,有一种众所周知的技术,将页面的组件分散到多个域中,以并行下载。和其他许多人一样。例如,www.example.com是HTML的宿主,然后将图像放在images.example.com上,将javascripts放在scripts.example.com上。这回避了一个事实,即大多数浏览器限制每台服务器同时连接的数量,以便成为好的网络公民

以上不是我所说的

这不仅仅是重定向到内容交付网络(或者可能是——请看问题的底部) 我所说的是在一个完全不同的域上托管Java脚本。让我具体一点。就在去年左右,我注意到:

youtube.com已将其.JS文件移动到ytimg.com

cnn.com已将其.JS文件移动到cdn.turner.com

weather.com已将其.JS文件移动到j.imwx.com

现在,我了解了一些内容交付网络,比如专门为大型网站外包服务的公司。(特纳的“特殊领域”中的“cdn”一词让我们明白了这个概念的重要性)

但请注意,通过这些示例,每个站点都有自己专门注册的域,而不是内容交付网络或其他基础设施提供商的域。事实上,如果您试图从大多数脚本域加载主页,它们通常会重定向回公司的主域。如果反向查找涉及的IP,它们有时会指向CDN公司的服务器,有时则不会

我为什么在乎? 我曾在两家不同的安全公司工作过,我对恶意Java脚本产生了偏执狂

因此,我遵循将允许Javascript(和其他活动内容,如Java)运行的网站列入白名单的做法。因此,要使像cnn.com这样的网站正常工作,我必须手动将cnn.com放入列表中。这是一种背后的痛苦,但我更喜欢它而不是其他选择

当人们使用scripts.cnn.com之类的东西来并行化时,适当的通配符就可以很好地工作。当人们使用CDN公司域之外的子域时,我可以允许CDN公司的主域前面也有一个通配符,并且一箭双雕(例如*.edgesuite.net和*.akamai.com)

现在我发现(截至2008年)这还不够。现在,我必须浏览一个我想列入白名单的页面的源代码,找出该站点用来存储其Javascript的“秘密”域。在某些情况下,我发现我必须允许三个不同的领域,使一个网站的工作

为什么所有这些主要网站都开始这样做? 编辑:好的,它似乎与内容的CDN交付有关。所以让我根据他的研究稍微修改一下这个问题

为什么weather.com使用j.imwx.com而不是twc.vo.llnwd.net

为什么youtube.com使用s.ytimg.com而不是static.cache.l.google.com

这背后一定有原因。

限制cookie流量

在特定域上设置cookie后,对该域的每个请求都会将cookie发送回服务器。每一个请求


这可以快速增加。

不仅仅是javascript可以移动到不同的域,而且尽可能多的资产可以提高性能

大多数浏览器对单个域的同时连接数量都有限制(我认为大约是4个),因此当你有很多图像、js、css等时,下载每个文件时往往会遇到障碍

当从服务器下载每个文件时,您可以使用诸如YSlow和FireBug之类的工具来查看

通过将资源放在不同的域上,您可以减少主域上的负载,并可以在任何给定时间拥有更多同时连接和下载更多文件

我们最近推出了一个房地产网站,它有很多图片(房子的图片,duh:p),这些图片使用了这个原理,所以列出数据要快得多


我们也在许多其他拥有高资产量的网站上使用了此功能。

我想你回答了自己的问题

我相信你的问题与安全有关,而不是为什么


也许需要一个新的元标记来描述相关页面的有效CDN,那么我们只需要一个浏览器附加组件来读取它们并相应地进行操作。

我认为CDN理论中有一些东西:

例如:

$ host j.imwx.com
j.imwx.com              CNAME   twc.vo.llnwd.net
twc.vo.llnwd.net        A       87.248.211.218
twc.vo.llnwd.net        A       87.248.211.219
$ whois llnwd.net
<snip ...>
Registrant:
  Limelight Networks Inc.
  2220 W. 14th Street
  Tempe, Arizona 85281-6945
  United States
我猜这是谷歌内部运行的静态内容CDN

$ host cdn.turner.com
cdn.turner.com A record currently not present
不可能把他们都赢了


顺便说一下,如果您将Firefox与NoScript附加组件一起使用,那么它将自动搜索源代码,并将白名单的过程GUI化。基本上,单击状态栏中的NoScript图标,您会看到一个域列表,其中包含临时或永久白名单选项,包括“此页面上的所有内容”。

这是因为垃圾邮件和内容过滤器进行了阻止吗?如果他们使用奇怪的域名,那么很难弄清楚,或者你最终会阻止你想要的东西


不知道,只是一个想法。

如果我是一家知名的多品牌公司,我认为这种方法是有意义的
$ host cdn.turner.com
cdn.turner.com A record currently not present