Tomcat将完全读取请求标头,但POST
正文必须由servlet
读取。
我的问题是如果servlet
在没有阅读的情况下发送回复,请求正文会发生什么?对于keep alive
的大多数情况,如果连接为HTTP/1.1
,则会将其放弃或作为下一个请求的请求标头。
我认为nginx
正确处理此方案的错误。但我没有在bz.apache.org
找到任何错误报告。
在这种情况下,网络服务器的假设行为是什么?
Tomcat版本:7.0.55,请求正文与Content-Length
而非chunked
一起发送。
背景
我有两个POST
请求都有请求体(json字符串)使用一个连接发送(HTTP/1.1
默认保持活动状态),但第一个请求的servlet没有读取请求body,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 -
答案 0 :(得分:2)
如果没有读取处理请求,则丢弃正文。
这与Tomcat或servlet无关,而是与HTTP协议有关。 HTTP协议是无状态的,您询问的行为将要求服务器记住第一个请求的主体:将该信息保存为某个状态。这样做也没有意义:POST请求的主体不太可能包含可以解释为请求头的字节。
Tomcat我们不太可能有这样一个根本和破坏性的错误。如果您认为自己看到了这样的错误,那么您可能会误解某些内容。