Is question mark in URL part of query string?

♀尐吖头ヾ 提交于 2019-12-06 00:11:04

问题


TL;TR: Is (first) question mark in URL part of query or is is just a separator followed by query?

The RFC 1738, section 3.3, suggests that the "?" (question mark) is not part of the query string, but just separates it from the path:

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

Grammar presented in the RFC 3986, Appendix A., also indicate the "?" is not part of the actual query string:

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

Now, let's consider two URLs:

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

Are they equivalent or distinct?

Is it valid to distinguish them and use to identify two different resources?


回答1:


tl;dr:

  • The ? is not part of the query component.
  • The URIs are not equivalent, because one has no query component, while the other one has an empty query component.

The URI standard (STD 66) is currently RFC 3986.

Section 6.2. Comparison Ladder describes methods how to test if URIs are possibly equivalent.

In 6.2.3. Scheme-Based Normalization it says:

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.

Where "examples above" refers to:

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

(These 4 URIs are equivalent.)

So http://example.com/api/item.json has no query component, while http://example.com/api/item.json? has an empty query component.



来源:https://stackoverflow.com/questions/34098717/is-question-mark-in-url-part-of-query-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!