在HTTP中,是仅在将路径作为Request-URI时允许的查询?

时间:2017-07-20 11:57:23

标签: http curl httprequest uri

我在实现简单的Web服务器时遇到了问题。根据规范,HTTP/1.1 request从这一行开始:

Request-Line   = Method SP Request-URI SP HTTP-Version CRLF

在这一行中,有一个Request-URI,其定义如下:

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

因此,我可以发送完整的URI(包含架构,服务器名称等)或abs_pathauthority,如规范中所定义,仅适用于{{1 }} 方法)。然后我有:

CONNECT

这些定义来自URI spec,它在HTTP规范中链接。如我们所见,abs_path = "/" path_segments path_segments = segment *( "/" segment ) 只是一个绝对路径,没有查询。

到目前为止的理论。现在,当我实际向abs_path发送HTTP GET请求时,会发送此行:

http://example.com/?key=value

我尝试使用Firefox,Chrome和GET /?key=value HTTP/1.1 。根据规格,这不应该是违法的吗?我在监督什么吗?

2 个答案:

答案 0 :(得分:3)

您的问题是您正在查看过时版本的规范。

请参阅https://www.greenbytes.de/tech/webdav/rfc7230.html#origin-form了解正确的ABNF。

答案 1 :(得分:2)

这是RFC 2616中的一个已知错误:

RFC 7230废弃了RFC 2616,允许它。其request-line的定义使用request-target(而不是Request-URI),这允许origin-form(而不是abs_path):

origin-form    = absolute-path [ "?" query ]