如果没有在GET请求中指定http版本,为什么服务器不会等待http标头?
问题描述:
如果我通过netcat发出一个GET请求,但没有指定http版本 - GET /
,我从服务器收到响应,但没有等到我发送任何头文件和一个空行。但是,如果版本在那里 - GET/HTTP/0.1
,它的行为正常,即使它是0.1
。我在google.com
,apache.org
和microsoft.com
上进行了测试。它是由协议定义的吗?如果没有在GET请求中指定http版本,为什么服务器不会等待http标头?
答
这种形式的请求(GET /
没有版本)被早期版本的HTTP协议(称为HTTP/0.9)使用,该协议根本不支持头文件。请参阅The Original HTTP as defined in 1991。
的HTTP 1.0(RFC 1945)和HTTP 1.1(RFC 2616)以后的规范要求HTTP 1.0+实现识别HTTP 0.9请求和响应(RFC 7230用于HTTP 1.1后丢弃的要求)。
RFC 1945规定:
一个HTTP消息的版本是由HTTP版本字段在消息的第一行指示。 如果未指定协议版本,则收件人必须假定该邮件采用简单的HTTP/0.9格式。