java - 来自 HTTP 客户端的 PUT 请求后获取 "411 Length Required"

标签 java http rest put content-length

我正在开发一个实现 HTTP 客户端的 Java 程序。 我测试它向服务器发送请求。 GET、POST 和 DELETE 请求工作正常。 例如在一个 POST 请求之后我得到一个输出

Data extracted:
{"status":{"message":"ok"}}

并且数据库反射(reflect)了所做的更改。

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

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

最佳答案

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

The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message.

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

关于java - 来自 HTTP 客户端的 PUT 请求后获取 "411 Length Required",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15619562/

相关文章:

java - 代码设计 - 在契约(Contract)中包括听众/事件

web-services - REST API 设计 : different granularity for receiving and updating resources

mysql - 创建 rest api url 以连接 mysql 数据库

java - 从客户端浏览器 (REST) 上的服务器返回一个 zip(或任何文件)

android - 如何使用 Retrofit 处理多个 API 端点?

java - Android Fragment 中的可折叠菜单

java - RTSP 到 HLS(带音频)

java - 使用插入查询未将数据插入到 Sqlite 数据库中

http - 网站外部链接 : HTTP vs HTTPS?

http - Jmeter 显示硬编码变量