2010-10-21 119 views
8

我知道%20和+都解碼爲相同的二進制值(一個空格),對於大多數Web服務器,尤其是那些映射到物理文件的Web服務器,它們將指向相同的資源。%20和+在http url中是否相同?

但我的問題是,像http://www.example.org/hello%20world這樣的網址必須指向與http://www.example.org/hello+world相同的資源,它們是否是正常的?

在HTTP/1.0 +沒有映射到一個空間,所以我特別要求關於HTTP/1.1。

+0

從來沒有考慮過這個,很有趣,看到這個正確的答案,很好的問題。 – Dave 2010-10-21 21:12:27

回答

4

只在查詢字符串內:加號是保留字符,因此必須進行編碼才能在路徑或查詢字符串中傳遞實際的「+」。它的使用作爲空間的替代品是W3C Recommendation只適用於查詢字符串:

在查詢字符串,加號 保留爲 空間速記符號。因此,必須對實際加號 進行編碼。使用該方法 使查詢URI更容易通過 不允許有空格的系統。

URI比較(RFC 2616):

當比較兩個URI如果 它們匹配或不決定,客戶端應該使用 整個的區分大小寫的八位位組按八位字節 比較的URI,與 這些異常:

- A port that is empty or not given is equivalent to the default 
    port for that URI-reference; 

    - Comparisons of host names MUST be case-insensitive; 

    - Comparisons of scheme names MUST be case-insensitive; 

    - An empty abs_path is equivalent to an abs_path of "/". 

人物比在 「保留」和其他「不安全「集合(參見RFC 2396 [42])等效於它們的 」「%」HEX HEX「編碼。

保留字符(RFC 2396

「;」 | 「/」| 「?」 | 「:」| 「@」| 「&」| 「=」| 「+」| 「$」| 「,」

因此,在第三次復飛時,沒有任何官員聲稱他們是同一件事。用字面上的'+'來指導http://example.org/hello+world到一個名爲hello+world的目錄是不正確的,但沒有什麼說它應該被認爲等同於一個空間。

+1

在引用部分中,它表示「**在查詢字符串中,**加號被保留爲空格的簡寫符號。」在查詢字符串內與通常的url內容不同。在一般情況下,答案是否定的,但它可能是 – Davy8 2010-10-21 21:26:28

+1

在OP的「http:// www.example.org/hello%20world」和「http:// www.example.org/hello + world」的示例中您引用的部分不適用,因爲它不是查詢字符串的一部分。 – Davy8 2010-10-21 21:31:21

+0

@ Davy8 - 我想你現在已經把我踢到了正確的答案:) – 2010-10-21 21:48:38

相關問題