必须在URL路径中等效地处理'@'和'%40'吗?

时间:2016-04-28 17:59:02

标签: http url uri rfc1738

跟进Can I use an at symbol (@) inside URLs?

基于top voted answer@不是URL路径中的保留字符(尽管它在主机中)。

但是,如果路径中有@,那么URL编码的表单是否可以互换?换句话说,twitter.com/@user是否严格等同于twitter.com/%40user

在实践中,似乎它们经常互换使用,但如果情况严格如此(例如AbC@gmail.com在技术上与abc@gmail.com不同,则很好奇,但几乎每个人都对待它们)。< / p>

更广泛地说,何时需要对字符和URL编码版本进行相同处理,并且在不同时(例如example.com/path%2Fasdfexample.com/path/asdf不同)...

1 个答案:

答案 0 :(得分:3)

URI http://twitter.com/@userhttp://twitter.com/%40user 等效。

URI标准为STD 66,目前映射到RFC 3986(更新RFC 1738)。

6.2.2.2. Percent-Encoding Normalization部分定义了如何规范化百分比编码的URI以比较它们的等价性(在大写十六进制数字A - F之后,由6.2.2.1 Case Normalization定义。

它说:

  

[...]某些URI生成器百分比编码不需要百分比编码的八位字节,从而导致URI与其非编码对应项等效。这些URI应该通过解码与未保留字符对应的任何百分比编码的八位字节来规范化,如Section 2.3中所述。

链接部分2.3列出了无保留字符,它们是:

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

本节还指出,即使在没有发生规范化的情况下:

  

将替换未保留字符与其对应的百分比编码的US-ASCII八位字节不同的URI是等效的:它们标识相同的资源。

@不是“无保留”集的一部分。它是"reserved" set的一部分,它说:

  

将保留字符替换为相应的百分比编码八位字节的URI不同。