7

TL;TR:查询的 URL 部分是(第一个)问号还是只是一个分隔符,后跟查询?

RFC 1738第3.3 节建议“?” (问号)不是查询字符串的一部分,而只是将其与路径分开:

http://<host>:<port>/<path>?<searchpart>

RFC 3986附录 A.中的语法也表示“?” 不是实际查询字符串的一部分:

URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]

现在,让我们考虑两个 URL:

  1. http://server.com/api/item.json
  2. http://server.com/api/item.json?

它们是等价的还是不同的?

区分它们并用于识别两种不同的资源是否有效?

4

1 回答 1

6

tl;博士:

  • ?不是查询组件的一部分。
  • URI 是不等价的,因为一个没有查询组件,而另一个有一个的查询组件

URI 标准 ( STD 66 ) 目前是RFC 3986

6.2 节。比较阶梯描述了如何测试 URI 是否可能等效的方法。

6.2.3 中。基于方案的规范化它说:

当相关组件为空时,规范化不应删除分隔符,除非方案规范允许这样做。例如,http://example.com/?不能假定 URI 等同于上述任何示例。

其中“上述示例”指的是:

http://example.com
http://example.com/
http://example.com:/
http://example.com:80/

(这 4 个 URI 是等效的。)

所以http://example.com/api/item.json没有查询组件,而http://example.com/api/item.json?有一个空的查询组件。

于 2015-12-05T11:03:04.503 回答