28

我注意到,就在去年左右,许多主要网站都对其页面结构进行了相同的更改。每个人都将他们的 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

这背后一定有道理。

4

10 回答 10

41

您的后续问题本质上是:假设一个流行的网站使用 CDN,为什么他们会使用自己的 TLD,例如 imwx.com,而不是子域 (static.weather.com) 或 CDN 的域?

好吧,使用他们控制的域而不是 CDN 的域的原因是他们保留了控制权——他们甚至可以完全更改 CDN,只需要更改 DNS 记录,而不是必须更新数千个页面/应用程序中的链接。

那么,为什么要使用无意义的域名呢?嗯,像 .js 和 .css 这样的帮助文件的一个重要问题是,您希望它们尽可能多地被代理和人们的浏览器缓存到下游。如果一个人点击 gmail.com 并且所有的 .js 文件都从他们的浏览器缓存中加载出来,那么该网站对他们来说显得更加快捷,而且它还节省了服务器端的带宽(每个人都赢了)。问题是,一旦您发送 HTTP 标头进行真正激进的缓存(即缓存我一周或一年或永远),这些文件就不再可靠地从服务器加载,您无法更改/修复他们因为事情会在人们的浏览器中中断。

因此,公司要做的就是进行这些更改并实际更改所有这些文件的 URL,以迫使人们的浏览器重新加载它们。循环访问“a.imwx.com”、“b.imwx.com”等域是如何完成的。

通过使用无意义的域名,Javascript 开发人员和他们的 Javascript 系统管理员/CDN 联络人可以拥有他们自己的域名/DNS,他们正在推动这些更改,他们负责/自主。

然后,如果 TLD 上开始发生任何类型的 cookie 阻止或脚本阻止,它们只会从一个无意义的 TLD 更改为 kyxmlek.com 或其他。他们不必担心会意外做出对所有 *.google.com 产生反制副作用的邪恶行为。

于 2008-10-02T01:53:33.447 回答
7

限制 cookie 流量?

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

这可以很快加起来。

于 2008-10-02T00:37:13.833 回答
4

很多原因:

CDN - 不同的 dns 名称可以更轻松地将静态资产转移到内容分发网络

并行性 - 图像、样式表和静态 javascript 正在使用另外两个不会阻塞其他请求的连接,例如 ajax 回调或动态图像

Cookie 流量 - 完全正确 - 特别是对于那些习惯在 cookie 中存储远不止简单会话 ID 的网站

负载整形 - 即使没有 CDN,仍然有充分的理由将静态资产托管在较少的 Web 服务器上,这些服务器经过优化以极快地响应大量文件 url 请求,而站点的其余部分托管在大量响应的服务器上更多处理器密集型动态请求


更新 - 您不使用 CDN 的 dns 名称的两个原因。客户端 dns 名称充当 CDN 正在缓存的资产的正确“蜂巢”的关键。此外,由于您的 CDN 是一种商品服务,您可以通过更改 dns 记录来更改提供程序 - 这样您就可以避免在您的站点上进行任何页面更改、重新配置或重新部署。

于 2008-10-02T01:41:05.117 回答
2

我认为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

Limelight 是一个 CDN。

同时:

$ host s.ytimg.com
s.ytimg.com             CNAME   static.cache.l.google.com
static.cache.l.google.com       A       74.125.100.97

我猜这是 Google 内部运行的静态内容的 CDN。

$ host cdn.turner.com
cdn.turner.com A record currently not present

啊,好吧,赢不了所有人。

顺便说一句,如果您使用带有 NoScript 附加组件的 Firefox,那么它将自动执行搜索源代码的过程,并通过 GUI 处理白名单的过程。基本上,单击状态栏中的 NoScript 图标,您将获得一个域列表,其中包含临时或永久白名单选项,包括“所有在此页面上”。

于 2008-10-02T01:07:21.703 回答
1

大约两到三年前,我在以前的雇主那里实施了这个解决方案,当时网站由于遗留的 Web 服务器实施而开始过载。通过将 CSS 和布局图像移至 Apache 服务器,我们减少了主服务器上的负载并不断提高速度。

但是,我一直认为 Javascript 函数只能从与页面本身相同的域中访问。较新的网站似乎没有此限制:正如您所提到的,许多网站在单独的子域甚至完全独立的域上都有 Javascript 文件。

谁能给我一个关于为什么现在可能的指针,而不是几年前?

于 2009-08-11T15:56:07.040 回答
0

您可以移动到不同域的不仅仅是 javascript,而且尽可能多的资产会产生性能改进。

大多数浏览器对您可以与单个域建立的同时连接的数量有限制(我认为它大约是 4 个),因此当您有很多图像、js、css 等时,通常会在下载每个文件时遇到问题。

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

通过在不同的域中拥有资产,您可以减轻主域的负载,并且可以在任何给定时间拥有更多的同时连接并下载更多文件。

我们最近推出了一个房地产网站,其中有很多图片(房屋的,duh :P),它使用这个原理来制作图片,所以列出数据要快得多。

我们还在许多其他具有高资产量的网站上使用了它。

于 2008-10-02T00:38:30.680 回答
0

我想你回答了你自己的问题。

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

也许一个新的 META 标记是为了描述相关页面的有效 CDN,那么我们只需要一个浏览器插件来读取它们并做出相应的行为。

于 2008-10-02T00:55:11.217 回答
0

会不会是因为垃圾邮件和内容过滤器的拦截?如果他们使用奇怪的域,那么就很难弄清楚和/或你最终会阻止你想要的东西。

不知道,只是一个想法。

于 2008-10-02T01:19:31.893 回答
0

如果我是一家知名的多品牌公司,我认为这种方法会很有意义,因为您希望将 javascript 代码作为库提供。我想让尽可能多的页面在处理地址、州名、邮政编码等内容时尽可能保持一致。AJAX 可能使这种担忧变得突出。

在当前的互联网商业模式中,域名是品牌,而不是网络名称。如果您被收购或分拆品牌,您最终会进行大量域名更改。即使是最突出的网站,这也是一个问题。

在 *.netscape.com 和 *.mcom.com 中仍有指向有用文档的链接早已不复存在。

网景的维基百科说:

“2004 年 10 月 12 日,流行的开发者网站 Netscape DevEdge 被 AOL 关闭。DevEdge 是 Internet 相关技术的重要资源,维护着 Netscape 浏览器的权威文档、HTML 和 JavaScript 等相关技术的文档以及热门文章由 Danny Goodman 等行业和技术领导者撰写。来自 DevEdge 的一些内容已在 Mozilla 网站上重新发布。

因此,在不到 10 年的时间内:

  • 马赛克通讯公司
  • 网景通信公司
  • 美国在线
  • 美国在线时代华纳
  • 时代华纳

如果您将代码放在不是品牌名称的域中,您将保留很大的灵活性,并且在重新命名网站时不必重构所有入口点、访问控制和代码引用。

于 2008-10-02T01:27:23.307 回答
0

我曾与一家这样做的公司合作过。他们位于具有相当好的对等互连的数据中心中,因此 CDN 推理对他们来说并不那么重要(也许这会有所帮助,但他们不会因此而这样做)。他们的原因是他们并行运行多个网络服务器,共同处理他们的动态页面(PHP 脚本),并且他们在一个单独的域中提供图像和一些 javascript,在该域上他们使用快速、轻量级的网络服务器(例如 lighttpd 或 thttpd)来提供服务图片和静态javascript。

PHP 需要 PHP。静态 Javascript 和图像没有。当您需要做的只是绝对最低限度时,可以从功能齐全的网络服务器中剥离很多东西。

当然,他们可能会使用代理将请求重定向到特定子目录到不同的服务器,但使用不同的服务器处理所有静态内容更容易。

于 2008-10-02T02:04:38.977 回答