Tomcat可以接受没有Host头的HTTP 1.1请求吗?

use*_*196 6 tomcat hostheader bad-request http-1.1

HTTP 1.1声明:"客户端必须在所有HTTP/1.1请求消息中包含主机头字段"

但是,我正在处理的机器会发出这个确切的POST(包含坐标),我无权更改:

POST /touch HTTP/1.1
Content-type: application/x-www-form-urlencoded
Content-Length: <n>

x=<int x>&y=<int y>
Run Code Online (Sandbox Code Playgroud)

400 Bad Request由于缺少Host头字段,Tomcat 7立即响应,POST永远不会到达我的servlet.有什么方法可以避免这个错误响应并使用servlet处理POST以支持这些旧机器吗?

Tom*_*icz 5

正如您已经注意到的,HTTP 1.1规范说(大胆的):

客户端必须在所有HTTP/1.1请求消息中包含Host头字段.[...] HTTP/1.1代理必须确保它转发的任何请求消息都包含一个适当的主机头字段,用于标识代理请求的服务.所有基于Internet的HTTP/1.1服务器必须以400(错误请求)状态代码响应任何缺少主机头字段的HTTP/1.1请求消息.

客户端错误地使用HTTP 1.1协议,您不应该尝试在服务器端解决此问题.你可以做的是设置一些自定义HTTP代理,只需添加Host标题.但这是一个肮脏的解决方法.或者将协议降级为1.0.

另请注意,即使您以某种方式设法让Tomcat接受此类请求(这违反了规范),如果任何HTTP代理在两端之间,您仍会遇到一些问题.