查询字符串的URL部分是问号吗?

时间:2015-12-04 22:42:19

标签: url query-string rfc3986 rfc1738

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

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

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

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

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

现在,让我们考虑两个网址:

  1. http://server.com/api/item.json
  2. http://server.com/api/item.json?
  3. 它们是等同还是不同?

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

1 个答案:

答案 0 :(得分:5)

tl; dr:

  • ?不是查询组件的一部分。
  • URI不等效,因为其中一个 没有查询组件,而另一个具有 查询组件< /强>

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

6.2. Comparison Ladder节描述了如何测试URI是否可能等效的方法。

6.2.3. Scheme-Based Normalization中说:

  

当关联组件为空时,标准化不应删除分隔符,除非通过方案规范获得许可。例如,不能假定URI http://example.com/?与上述任何示例等效。

上面的例子&#34;上面的例子&#34;指:

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?有一个空查询组件。