我看到一些pages引用了看似绝对的URI,带有主机但没有协议。例如:
<script src="//mc.yandex.ru/metrika/watch.js" type="text/javascript"></script>
我的假设是,这意味着“使用与我们现在相同的协议”,因此如果自己的协议为https://mc.yandex.ru/metrika/watch.js
,则父网页将请求https
。
这种语法是否正确?标准的一部分?这是什么意思?
答案 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
指令包含的文件导致包含的文件被请求两次。所有其他资源(如图像和锚点)应按预期工作。