在HTML中使用不带协议的绝对URI和主机名?

3

我看到一些页面引用了似乎是绝对URI的东西,带有主机但没有协议。例如:

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

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

这个语法是否正确? 是标准的一部分吗?它是什么意思?
1个回答

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

以两个斜杠字符开头的相对引用称为
网络路径引用;很少使用此类引用。

和第5.4节:

Within a representation with a well defined base URI of

  http://a/b/c/d;p?q

a relative reference is transformed to its target URI as follows...

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

一个以双斜杠开头的URI将被转换以匹配基础URI。我知道其中一种用法(事实上,我所见过的唯一用法)是在使用CDN时(例如,通过Google CDN包括jQuery)。Google在http协议和https协议上都托管了一个版本,使用这种URI格式将导致正确的版本被加载,无论您使用哪种协议。
更新(刚找到并阅读了this article
看起来在整个页面中使用这种URI格式可以防止IE中出现“此页面包含安全和非安全项”的错误。但值得注意的是,这种格式会导致通过元素或@import指令包含的文件被请求两次。所有其他资源(如图像和锚点)应该按预期工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接