2013-03-25 213 views
8

我正在研究实现HTTP客户端的Java程序。 我测试它发送请求到服务器。 GET,POST和DELETE请求正常工作。 例如POST请求后,我得到一个输出在HTTP客户端发出PUT请求后获取“411 Length Required”

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

所以'setHeader(“Content-Length”,“”+ file.length())''resp。 'setContentLength((int)file.length());'左右。 – 2013-03-25 16:15:00

+0

我不想上传文件。只是试图通过一个网址与一堆参数来更新数据库 – 2013-03-25 16:22:44

+0

内容长度为0,正如@Sachin所说的。 – 2013-03-25 16:45:10

回答

16

是的,问题涉及到Content-Length。 HTTP错误411意味着

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

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

+1

我也试过这个,我在这种情况下得到的是'数据提取: {“status”:{“message”:“内容类型'application/octet-stream'not supported”}}'仍然没有数据库变化 – 2013-03-25 16:21:02

+0

这是另一个与Content-type相关的问题。您的服务器可能不报告适当的MIME类型或不支持此内容类型 – Sachin 2013-03-25 16:23:26

+0

我联系了服务器,他们告诉我他们测试了相同的PUT请求,并且它与它们的HTTP客户端实现协同工作。问题是我使用专用的Java ME平台,并且我认为我的HTTP Client版本中存在一个错误。我不明白的是它如何与POST一起工作呢? – 2013-03-25 16:27:31

相关问题