URI以两个斜杠开头......它们的表现如何?

时间:2010-11-01 16:56:38

标签: html http uri protocol-relative

最近我看到了正常工作代码块,如下所示:

<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的资源?

4 个答案:

答案 0 :(得分:86)

您正在寻找的资源是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

答案 1 :(得分:61)

这些是protocol relative URLs.他们指向一个地址,保留当前的协议。

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

更新:官方文档 in RFC 3986:

  

以两个斜杠字符开头的相对引用被称为      网络路径参考;这种参考很少使用。一个      以单个斜杠字符开头的相对引用是      称为绝对路径参考。这样做的相对参考      不以斜杠字符开头称为相对路径引用。

答案 2 :(得分:30)

他们是协议独立的网址。如果网页在https上提供,则请求使用https,如果是http,则为http。

保罗·爱尔兰似乎通过将其纳入他的样板代码来推广它们。

答案 3 :(得分:1)

请注意,它不仅 http https ,还包括文件 ftp ,等。

这意味着如果您在localhost上直接在浏览器中打开 .htm 文件,浏览器将解析 // 作为文件协议和您的页面不会工作。这可能会导致打包网站出现问题,因为&#34; native&#34;应用程序使用Electron,PhoneGap等工具

示例:

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

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