关于无版本字段的GET /请求的标准合规性及服务器支持要求的技术问询
GET /请求的标准合规性及服务器支持要求的技术问询 你提到的这个现象确实挺典型的——有些服务器收到GET /(仅跟随换行符)的请求会返回HTTP/1.0 200 OK,而另一些则直接返回400错误。这背后的核心原因,要从HTTP协议的历史版本规范差异说起。
首先,你挖到的HTTP/0.9(1991年的初代HTTP协议)确实明确支持这种极简请求格式,它也被称为“单行协议”:
HTTP/0.9 from 1991 defines the following:
This request consists of the word "GET", a space, the document address,[...].
The document address will consist of a single word (ie no spaces). If any further words are found on the request line, they MUST either be ignored, or else treated according to the full HTTP spec
按照HTTP/0.9的规范,GET /就是完全合法的请求,不需要协议版本号,也不需要Host头这类额外字段。
但到了HTTP/1.0及之后的版本,规范就做了明确的升级:请求行必须包含协议版本(比如GET / HTTP/1.0),而HTTP/1.1更是强制要求请求中携带Host头。所以从HTTP/1.0+的标准来看,GET /这种不带版本的请求是不符合规范的,服务器返回400错误是完全合规的处理方式。
那回到你的核心疑问:服务器“应该”支持这种HTTP/0.9风格的请求吗?其实并没有强制要求。很多现代服务器(比如你提到的某知名搜索引擎的服务器)保留这种兼容性,只是厂商出于兼容老旧客户端、特殊调试场景的额外措施,不属于标准强制要求的义务。
这种极简请求确实比较冷门,日常开发中很少遇到,所以你之前没接触过也完全正常。不同服务器的处理差异,本质上是厂商在“严格遵循新版本规范”和“兼容历史遗留场景”之间做出的不同取舍而已。
备注:内容来源于stack exchange,提问作者Richard

