2016-04-28 897 views
2

跟進到Can I use an at symbol (@) inside URLs?必須在URL路徑中對待「@」和「%40」是否等效?

基礎上top voted answer,該@是不是在URL路徑保留字符(雖然它是在主機)。

但是,在路徑中給出@,URL編碼形式是可以互換的嗎?換句話說,是twitter.com/@user嚴格等於twitter.com/%40user

在實踐中,它們似乎經常互換使用,但好奇的是,如果這是嚴格的話(例如[email protected]在技術上與[email protected]不同,但幾乎所有人都將它們視爲相同)。

更廣泛地說,做的時候人物和有網址編碼版本需要同等對待,並在不同的(例如example.com/path%2Fasdf是不一樣的example.com/path/asdf)...

回答

3

的URI的http://twitter.com/@userhttp://twitter.com/%40user當量。


的URI標準是STD 66,目前映射到RFC 3986(哪些更新RFC 1738)。

的部分6.2.2.2. Percent-Encoding Normalization定義瞭如何正常化百分比編碼URI來比較它們對等價(uppercasing十六進制數字A後 - F,通過6.2.2.1 Case Normalization所定義的)。

它說:

[...]一些URI生產者%的編碼八位字節不需要百分號編碼,導致相當於其非編碼對應的URI。如Section 2.3中所述,應通過解碼與未保留字符相對應的任何百分比編碼字節來對這些URI進行標準化。

鏈接的2.3節列出了未保留字符,它們是:

  • ALPHA(a - zA - Z
  • DIGIT(0 - 9
  • -._~

該部分還指出,即使萬一沒有歸一化發生的情況:

URI是等效方面不同,在更換與其相應百分比編碼US-ASCII八位字節未保留字符的:它們識別相同的資源。

@不是「未預留」集合的一部分。它是"reserved" set的一部分,它說:

保留字符與相應百分比編碼字節替換不同的URI不相同。

相關問題