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以支持这些旧机器吗?
正如您已经注意到的,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代理在两端之间,您仍会遇到一些问题.
| 归档时间: |
|
| 查看次数: |
2827 次 |
| 最近记录: |