2016-04-28 898 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不相同。

相关问题