2012-10-09 57 views
5

HTTP 1.1规定: “客户端必须在所有HTTP/1.1请求消息的主机首部字段”Tomcat可以接受没有Host头的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> 

的Tomcat 7立即用400 Bad Request响应由于缺乏一个主机头域,和POST永远不会给我的servlet。有什么办法可以避免这个错误响应,并用servlet处理POST来支持这些旧的机器?

回答

4

正如你已经指出的那样,HTTP 1.1 spec says(粗体矿):

客户端必须在所有HTTP/1.1请求消息的主机头字段。 [...]的HTTP/1.1代理必须确保它不会转发任何请求消息包含标识由代理所请求的服务的合适的宿主报头字段。所有基于因特网的HTTP/1.1服务器必须以400(错误请求)状态码,其缺少Host头字段中的任何HTTP/1.1请求消息进行响应。

客户端错误地使用HTTP 1.1协议,您不应该尝试在服务器端解决此问题。你可以做的是安装程序,将刚才添加的Host头一些自定义的HTTP代理。但这是一个肮脏的解决方法。或者将协议降级到1.0。

还要注意的是,即使你以某种方式设法使Tomcat的接受这样的要求(这是针对规范),你还是会碰到一些问题,如果任何HTTP代理的两端之间。

+0

这是在工作中的测试工具,所以中间代理是不是一个问题。我宁愿有某种工作在tomcat的周围,就像一个过滤器或阀门,而不是建立一个代理,但我不认为这是剥夺阀前可以拦截该请求。 – user1684196