2011-04-06 81 views
4

從URL(通常是主機名)中省略「權限」組件,但指定方案(通常爲http:https:)是否合法(以及良好的慣例和良好的支持)?包含該方案但不包含權限(主機名)的URL?

例如,這些有效的網址是?

https:login.html (relative hostname and path) 
    https:/auth/login.html (relative hostname, absolute path) 

預期的行爲當然是使用當前主機名 - 路徑(相對)。

(順便說一句,這個假設//方案後的權限(主機)組成的一部分,我認爲這是正確的旅遊解說)

的動機是(普通)的要求,即的一些頁面網站將通過https和其他通過http加入,我們希望使用相對URL而不是絕對(在不同的環境中測試)。

回答

3

根據RFC1738,雙斜槓//是協議(方案)特定數據的一部分(因此根據本文檔它們不是強制性的)。

但3.2.2中的HTTP協議(RFC2616)使雙斜槓成爲該方案的一部分,所以這是必須的。沒有它們的沒有有效的HTTP URL。

從RFC2616 3.2.1:在HTTP

的URI可以用絕對形式或表示相對於[...]兩個 形式通過以下事實區分該絕對URI總是開始 用方案名稱後跟一個冒號。

...所以如果你指定了方案,那麼它已經被認爲是一個絕對的URI。

+0

在編寫簡單的URL解析器時,我回顧了幾年。如果你有協議,你必須有主機名。請參閱RFC1738的第3.1節。 – tomlogic 2011-04-06 15:27:33

+0

咦?在哪裏?我沒看到它。 '絕對URI包含正在使用的方案的名稱(),後跟一個冒號(「:」),然後是一個字符串(),其解釋取決於方案。「' – leonbloy 2011-04-06 15:27:42

+0

@leonbloy這就是我所說的「誰的解釋依賴於方案」意味着冒號':'後面的部分由執行協議指定,在我們的例子中是HTTP。而HTTP則是強制性的。 - 我鏈接了文檔並給出了您可以閱讀的章節號。 – vbence 2011-04-06 15:31:55

0

閱讀一些資料後,我認爲相關的參考是RFC1808

在那裏,它明確指出,如果指定一個方案名稱,則URL被認爲是絕對的。

它還評論(5.2),其RFC1630允許使用方案名稱一些相對URL,但:

  • 方案名稱必須是一樣的電流(基地​​),並會被忽略
  • 這種行爲只是在舊瀏覽器中實現
  • 它棄用

總之,上述網址無效。