gpt4 book ai didi

java - 当servlet未读取时,Tomcat将先前请求的请求主体作为请求 header 以保持连接

转载 作者:可可西里 更新时间:2023-11-01 17:07:33 26 4
gpt4 key购买 nike

Tomcat 会完整读取请求 header ,但POST 主体需要由servlet 读取。

我的问题是,如果 servlet 不读取响应就发送响应,请求主体会发生什么情况?对于 HTTP/1.1 的大多数情况,在连接keep alive 时被丢弃或作为下一个请求的请求 header 。

我认为这是 nginx 正确处理这种情况的错误。但是我没有在 bz.apache.org 中发现任何错误报告。

在这种情况下,网络服务器的假定行为是什么?

Tomcat version:7.0.55,请求体以Content-Length 而非chunked 发送。

背景:

我有两个 POST 请求都有请求正文(json 字符串)使用一个连接发送(HTTP/1.1 默认情况下保持 Activity 状态),但第一个 servlet请求没有读取请求体,tomcat将这个请求体作为下一个请求头,客户端得到HTTP/1.1 505 HTTP Version Not Supported。在tomcat的访问日志中,请求url就是请求体,一个json字符串。

10.128.8.6 - - [29/Jan/2016:09:47:30 +0800] "POST /action1.do HTTP/1.1" 200 57
10.128.8.6 - - [29/Jan/2016:09:47:30 +0800] "[123]POST /action2.do HTTP/1.1" 505 -

最佳答案

如果在处理请求时未读取正文,则主体将被丢弃。

这与 Tomcat 或 servlet 本身无关,而是与 HTTP 协议(protocol)有关。 HTTP 协议(protocol)是无状态的,您询问的行为需要服务器记住第一个请求的主体:将该信息保存为某种状态。这样做也毫无意义:POST 请求的主体不太可能包含可被解释为请求 header 的字节。

Tomcat 我们不太可能有这样一个根本性的和破坏性的错误。如果你认为你看到了这样的错误,你可能误解了一些东西。

关于java - 当servlet未读取时,Tomcat将先前请求的请求主体作为请求 header 以保持连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35080742/

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