2010-11-01 31 views
82

最近我看到工作代碼塊這樣的:以兩個斜線開頭的URI ......它們的表現如何?

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

回答

84

您正在查找的資源是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

+4

所以這可能是一個解決方案,使用JavaScript來確定http或https這種方式無論它會工作 – Ibu 2011-05-14 08:54:11

+0

所以我怎麼可以引用'http:// a/b/c/g''' //'沒有所有'/ a/b/c'? – 2012-11-16 09:44:49

+0

由於您需要達到父級別,請使用'../ g' - 它將使用當前協議並導向到'http:// a/b/c/g'。 – 2012-11-16 10:04:30

28

他們是獨立於協議的網址。如果網頁在https上提供,則該請求使用https,如果http然後是http。

保羅愛爾蘭似乎被包括在他的樣板代碼已經普及了他們。

54

這些是protocol relative URLs.它們指向一個地址,保持當前的協議。

這種標記通常用於避免「混合內容」問題(IE警告消息在同一個HTTPS頁面上抱怨httphttps資源)。

更新:正式文件 in RFC 3986:

以兩個斜槓字符開頭的相對引用被稱爲 網絡路徑參考;這種引用很少使用。以單斜槓字符開始的相對參考 稱爲絕對路徑參考。 不以斜槓字符開頭的相對引用被稱爲相對路徑引用。

+0

大瞭解,但如何兼容是這個與流行的瀏覽器。快速搜索告訴我,它不適用於IE6 ...這是一個HTML5功能? – 2011-03-03 21:49:32

+4

@Shane這應該適用於所有瀏覽器。你有鏈接聲稱它不能在IE6中工作嗎? – 2011-03-03 21:51:19

+4

很確定這是一個IE1功能! – 2012-09-13 02:14:01

2

注意的,這不僅是HTTPHTTPS獨立的,但也文件FTP

這意味着,如果你直接打開的.htm文件您本地主機上的瀏覽器,瀏覽器將解析//作爲文件協議,您的網頁將無法正常工作。這可能會導致在打包網站的「原生」使用像電子,的PhoneGap等工具

示例應用程序的問題:

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

<script src="file://mywebsite.com/resource.js"></script> 
相關問題