http url中的%20和+是否相同?

时间:2010-10-21 20:59:16

标签: http urlencode

我知道%20和+都解码为相同的二进制值(空格),对于大多数网络服务器,尤其是那些映射到物理文件的网络服务器,它们将指向相同的资源。

但我的问题是,像http://www.example.org/hello%20world这样的网址必须指向与http://www.example.org/hello+world相同的资源,它们是否规范相同?

在HTTP / 1.0 +中没有映射到空格,所以我特意询问HTTP / 1.1。

1 个答案:

答案 0 :(得分: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的目录是不正确的,但没有任何内容表明它应该被视为等同于空格。