2

简而言之:如何以符合 HTTP1.1 标准的方式来 rfc2616 对像http://example.com/?query这样的 URL 进行 GET 查询

维基百科

GET /?query HTTP/1.1
...

rfc2616 中它说

Request-URI    = "*" | absoluteURI | abs_path | authority

只有 abs_path 和 absoluteURI 与 GET 请求相关。

abs_path

其中 abs_path 实际上来自禁止“?”的uri rfc,因为 abs_path 实际上是查询部分之前的 uri 部分。所以看起来维基百科的变体在语法上是不正确的。

绝对URI

为此,uri rfc 说

absoluteURI   = scheme ":" ( hier_part | opaque_part )
hier_part     = ( net_path | abs_path ) [ "?" query ]

因此可以将这样的查询放入 Request-URI 中,但不幸的是 rfc2616 不允许为未与代理交谈的客户端传输 absoluteURI。可以通过网络服务器以符合标准的方式接收它,但实际上不可能通过浏览器或其他客户端以符合标准的方式发送它。

rel_path

令我惊讶的是rfc2616提到了一个“?” 在 rel_path 中,但rfc2396也不允许这样做,实际上也不可能将 rel_path 放在 http 请求的某个位置,因为 rel_path 规则在 rfc2616 中的任何地方都没有在语法上使用。

所以我的问题是,如何以符合标准的方式提出这样的请求,所有浏览器是否都违反了标准?

4

1 回答 1

4

这是 RFC 2616 中的一个错误。请参阅http://trac.tools.ietf.org/wg/httpbis/trac/ticket/11

于 2011-11-04T22:06:07.910 回答