gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:47:17 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com