我在实现简单的 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_path
(authority
是,如规范中所定义,仅适用于 CONNECT
方法)。然后我有:
abs_path = "/" path_segments
path_segments = segment *( "/" segment )
这些定义来自URI spec ,它在 HTTP 规范中链接。正如我们所见,abs_path
只是一个没有查询的绝对路径。
到目前为止的理论。现在,当我实际向 http://example.com/?key=value
发送 HTTP GET 请求时,会发送以下行:
GET /?key=value HTTP/1.1
我使用 Firefox、Chrome 和 curl
尝试过此操作。根据规范,这不应该是非法的吗?我在监督什么吗?
最佳答案
您的问题是您正在查看过时的规范版本。
参见https://www.greenbytes.de/tech/webdav/rfc7230.html#origin-form以获得正确的 ABNF。
关于http - 在 HTTP 中,仅提供路径作为 Request-URI 时是否允许查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45214021/