从HTTP客户端发出PUT请求后获得“411 Length Required”

时间:2013-03-25 16:11:17

标签: java http rest put content-length

我正在开发一个实现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标题有关,但我不确定。 在尝试添加此标头后,我的程序等待一分钟,然后抛出异常,通知它无法处理服务器响应。

如果需要,我还可以提供任何代码或堆栈跟踪。

1 个答案:

答案 0 :(得分:17)

是的,问题与Content-Length有关。 HTTP错误411表示

  

服务器拒绝接受没有定义Content-Length的请求。如果客户端在请求消息中添加了包含消息正文长度的有效Content-Length头字段,则客户端可以重复该请求。

因此,当您在POST / PUT方法中发送空RequestBody时,您还需要发送Content-Length:0。因此,请在您的请求中添加此标头。我不认为这个标题会导致您添加到Request Object中的问题。