我正在开发一个实现HTTP客户端的Java程序。 我测试它向服务器发送请求。 GET,POST和DELETE请求正常工作。 例如,在POST请求之后,我得到一个输出
Data extracted:
{"status":{"message":"ok"}}
并且数据库反映了所做的更改。
在PUT请求之后,我得到以下网页的html标记,指示错误。
Data extracted:
<html>
<head><title>411 Length Required</title></head>
<body bgcolor="white">
<center><h1>411 Length Required</h1></center>
<hr><center>nginx/1.2.6</center>
</body>
</html>
因此数据库中没有任何变化。
我发现这可能与Content-Length标题有关,但我不确定。 在尝试添加此标头后,我的程序等待一分钟,然后抛出异常,通知它无法处理服务器响应。
如果需要,我还可以提供任何代码或堆栈跟踪。
答案 0 :(得分:17)
是的,问题与Content-Length
有关。 HTTP错误411表示
服务器拒绝接受没有定义Content-Length的请求。如果客户端在请求消息中添加了包含消息正文长度的有效Content-Length头字段,则客户端可以重复该请求。
因此,当您在POST / PUT方法中发送空RequestBody
时,您还需要发送Content-Length:0
。因此,请在您的请求中添加此标头。我不认为这个标题会导致您添加到Request Object中的问题。