查询字符串的 URL 部分是否有问号?
Is question mark in URL part of query string?
TL;TR: 查询的 URL 部分中的(第一个)问号是否只是一个分隔符,后跟查询?
第 3.3 节的 RFC 1738 建议“?” (问号)不是查询字符串的一部分,只是将其与路径分开:
http://<host>:<port>/<path>?<searchpart>
RFC 3986附录A中给出的语法,也注明了“?”不是实际查询字符串的一部分:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
现在,让我们考虑两个 URL:
http://server.com/api/item.json
http://server.com/api/item.json?
它们是等价的还是不同的?
区分它们并用来标识两种不同的资源是否有效?
tl;博士:
?
不是查询组件的一部分。
- URI 不相同,因为一个有 no 查询组件,而另一个有 空查询组件.
URI 标准 (STD 66) is currently RFC 3986.
第 6.2. Comparison Ladder 部分描述了如何测试 URI 是否可能等价的方法。
在 6.2.3. Scheme-Based Normalization 中说:
Normalization should not remove delimiters when their associated component is empty unless licensed to do so by the scheme specification. For example, the URI http://example.com/?
cannot be assumed to be equivalent to any of the examples above.
其中“上述示例”是指:
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?
有一个空查询组件。
TL;TR: 查询的 URL 部分中的(第一个)问号是否只是一个分隔符,后跟查询?
第 3.3 节的 RFC 1738 建议“?” (问号)不是查询字符串的一部分,只是将其与路径分开:
http://<host>:<port>/<path>?<searchpart>
RFC 3986附录A中给出的语法,也注明了“?”不是实际查询字符串的一部分:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
现在,让我们考虑两个 URL:
http://server.com/api/item.json
http://server.com/api/item.json?
它们是等价的还是不同的?
区分它们并用来标识两种不同的资源是否有效?
tl;博士:
?
不是查询组件的一部分。- URI 不相同,因为一个有 no 查询组件,而另一个有 空查询组件.
URI 标准 (STD 66) is currently RFC 3986.
第 6.2. Comparison Ladder 部分描述了如何测试 URI 是否可能等价的方法。
在 6.2.3. Scheme-Based Normalization 中说:
Normalization should not remove delimiters when their associated component is empty unless licensed to do so by the scheme specification. For example, the URI
http://example.com/?
cannot be assumed to be equivalent to any of the examples above.
其中“上述示例”是指:
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?
有一个空查询组件。