HTML中使用主机的无协议绝对URI?

时间:2011-07-23 08:15:26

标签: html uri

我看到一些pages引用了看似绝对的URI,带有主机但没有协议。例如:

<script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>

我的假设是,这意味着“使用与我们现在相同的协议”,因此如果自己的协议为https://mc.yandex.ru/metrika/watch.js,则父网页将请求https

这种语法是否正确?标准的一部分?这是什么意思?

1 个答案:

答案 0 :(得分:3)

它被称为“网络路径参考”。可以在RFC 3986中找到相关文档。具体来说,请参阅第4.2节:

  

以两个斜杠字符开头的相对引用称为
  网络路径参考;很少使用这样的参考文献。

第5.4节:

  

在具有明确定义的基URI

的表示中
  http://a/b/c/d;p?q
     

将相对引用转换为其目标URI,如下所示......

"g:h"           =  "g:h"
...
"//g"           =  "http://g"
...

因此,转换为以双斜杠开头的URI以匹配基URI。我所知道的(事实上,我见过的唯一用途)的一个用途是使用CDN(例如,当通过Google CDN包含jQuery时)。 Google在http协议上托管了一个版本,在https协议上托管了另一个版本,无论您使用哪种协议,使用此URI格式都会导致加载正确的版本。

更新(刚刚找到并阅读this article

似乎在整个页面中使用此URI格式可以防止IE中的“此页面包含安全和非安全项目”错误。但是,值得注意的是,此格式导致通过link元素或@import指令包含的文件导致包含的文件被请求两次。所有其他资源(如图像和锚点)应按预期工作。