Tomcat的可以接受HTTP 1.1请求没有主机头?(Can Tomcat accept HTTP

2019-09-23 20:06发布

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>

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

Answer 1:

正如你已经指出的那样, HTTP 1.1规范说 (粗体矿):

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

客户端使用HTTP 1.1协议不正确,你不应该试图解决的是在服务器端。 你可以做的是安装程序,将只需添加一些自定义的HTTP代理Host头。 但是,这是一个肮脏的解决方法。 可替换地降级协议为1.0。

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



文章来源: Can Tomcat accept HTTP 1.1 requests without a Host header?