最近我看到了正常工作代码块,如下所示:
<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的资源?
答案 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页面上抱怨http
和https
资源。)
更新:官方文档 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>