我注意到将GET /
(+CRLF) 发送到某些网络服务器(例如来自知名搜索提供商)会产生一条HTTP/1.0 200 OK
消息。其他网络服务器响应错误HTTP/1.0 400
。
据我所知,甚至 HTTP/1.0 也需要版本字段。是GET /
(没有协议和主机)标准化、有效的缩短 GET 请求吗?
经过一番挖掘,我发现 1991 年的 HTTP/0.9 定义了以下内容:
- 该请求由单词“GET”、一个空格、文档地址、[...] 组成。
- 文档地址将由一个单词组成(即没有空格)。如果在请求行中发现任何其他单词,则必须忽略它们,或者根据完整的 HTTP 规范进行处理
使用 HTTP/0.9,请求似乎是可能的。一些消息来源称其为单线协议。不确定这是否是常识。我不知道也没有见过这个。网络服务器是否打算接受此 HTTP/0.9 请求?
没有版本号的请求是 HTTP/0.9 请求,也称为“简单请求”。如果支持,它将收到比 HTTP/1.0 或更高版本请求简单得多的响应。
RFC 1945(HTTP/1.0 规范)包括此类请求的定义(请参阅第 5 节)并要求服务器支持它们,但不鼓励客户端使用它们。
RFC 2068 和 RFC 2616(HTTP/1.1 规范的原始和第一次修订版)不再包含此类请求的定义。他们说“强制遵守以前的版本超出了协议规范的范围。” 但“在撰写本规范时”,他们希望“商业网络服务器”继续支持 http/0.9 和 http/1.0。
当 2014 年再次修订 http/1.1 时,它被拆分成一系列的 RFC(RFC 7230 到 7235),而不是一个大文档。RFC 7230 建议支持基于名称的虚拟主机的服务器不支持 http/0.9 请求。
互联网建立在“粗略共识和运行代码”之上。IETF 尽最大努力记录该共识并提出建议,但最终提供何种级别的向后兼容性取决于各个实施者的判断。
实际上,现代网络严重依赖基于名称的虚拟主机。因此,即使网络服务器软件理解这种古老的请求,它也很有可能不会返回所需的文档,