10

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

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

4

1 回答 1

17

是的,与Content-Length. HTTP 错误 411 表示

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

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

于 2013-03-25T16:17:26.083 回答