tomcat - Tomcat 可以接受没有主机 header 的 HTTP 1.1 请求吗?

标签 tomcat bad-request http-1.1 hostheader

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>

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

最佳答案

正如您已经注意到的,HTTP 1.1 spec says (大胆的矿山):

A client MUST include a Host header field in all HTTP/1.1 request messages. [...] An HTTP/1.1 proxy MUST ensure that any request message it forwards does contain an appropriate Host header field that identifies the service being requested by the proxy. All Internet-based HTTP/1.1 servers MUST respond with a 400 (Bad Request) status code to any HTTP/1.1 request message which lacks a Host header field.

客户端错误地使用了 HTTP 1.1 协议(protocol),您不应该尝试在服务器端解决这个问题。您可以做的是设置一些自定义 HTTP 代理,它只会添加 Host header 。但这是一个肮脏的解决方法。或者将协议(protocol)降级到 1.0。

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

关于tomcat - Tomcat 可以接受没有主机 header 的 HTTP 1.1 请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12808451/

相关文章:

http - 获取荷兰语格式的页面内容

spring-mvc - Spring MVC 资源映射标记在服务器主机上不起作用

java - Tomcat、Jetty 或其他网络服务器以将 Java 应用程序作为服务运行

asp.net-mvc - 图像网址中的“&”号MVC导致潜在危险的Request.Path

tomcat - spring boot 应用容器指导

c# - Azure 机器学习 - 文本分析 C# 错误请求正文,即使在验证 JSON 正文后也是如此

spring - AOP @Around : return BAD_REQUEST response

node.js - 对于从 Node 后端提供的静态 Assets ,无法使用 gzip 在 nginx 中关闭分块传输编码

rest - Dojo dgrid 未显示 "No Results found"消息

PHP 同时发送 http 1.0 和 1.1 header