一尘不染

以两个斜杠开头的URI……它们的行为如何?

html

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

<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?


阅读 300

收藏
2020-05-10

共1个答案

一尘不染

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

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

2020-05-10