URI以两个斜线开头……他们如何performance?

最近我看到了这样的代码块:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 

根据RFC 2396(URI语法)和RFC 2616(HTTP 1.1),这些以两个斜杠开头的URI是有效的,但不幸的是,RFC不能真正解释它们。

任何人都可以指向一个资源,解释浏览器将如何处理这些URI?

您正在寻找的资源是RFC 3986 。

见第4.2节和第5.4节。 从后者引用:

参考分辨率示例

在具有明确定义的基本URI的表示中:

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

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

  "g:h" = "g:h" "g" = "http://a/b/c/g" "./g" = "http://a/b/c/g" "g/" = "http://a/b/c/g/" "/g" = "http://a/g" "//g" = "http://g" "?y" = "http://a/b/c/d;p?y" "g?y" = "http://a/b/c/g?y" "#s" = "http://a/b/c/d;p?q#s" "g#s" = "http://a/b/c/g#s" "g?y#s" = "http://a/b/c/g?y#s" ";x" = "http://a/b/c/;x" "g;x" = "http://a/b/c/g;x" "g;x?y#s" = "http://a/b/c/g;x?y#s" "" = "http://a/b/c/d;p?q" "." = "http://a/b/c/" "./" = "http://a/b/c/" ".." = "http://a/b/" "../" = "http://a/b/" "../g" = "http://a/b/g" "../.." = "http://a/" "../../" = "http://a/" "../../g" = "http://a/g" 

这意味着,当基本URI是http://a/b/c/d;p?q并且使用//g ,相对引用将转换为http://g

这些是协议相对的URL。 他们指向一个地址,保持当前的协议。

这种表示法通常用于避免“混合内容”问题(IE警告消息在同一个HTTPS页面上抱怨httphttps资源)。

更新: RFC 3986中的官方文档:

以两个斜线字符开头的相对引用被称为networkingpath引用; 这种引用很less使用。 以单斜杠字符开头的相对引用被称为绝对path引用。 不以斜杠字符开始的相对引用被称为相对path引用。

他们是协议独立的url。 如果网页在https上提供,那么请求使用https,如果http然后是http。

  • 协议相关的URL
  • HTML的隐藏function

保罗·爱尔兰人似乎已经通过将他列入他的样板代码而将他们普及了。

请注意,这不仅是httphttps独立,而且还有文件ftp等。

这意味着如果你在本地主机上直接在你的浏览器中打开.htm文件, 浏览器将会parsing为文件协议 ,你的页面将无法工作。 使用Electron,PhoneGap等工具,可能会导致打包网站出现“native”应用程序问题。

例:

 <script src="//mywebsite.com/resource.js"></script> 

 <script src="file://mywebsite.com/resource.js"></script>