是否需要HTTP PUT请求才能包含正文?

时间:2009-08-05 13:47:53

标签: http

我在标准中找不到明确的规范。我有一个HTTP客户端在执行PUT请求时不包含Content-Length: 0标头,我没有指定主体,服务器被这些请求搞糊涂了,我想知道我应该指责哪个程序

5 个答案:

答案 0 :(得分:57)

如果HTTP请求具有Content-Length或Transfer-Encoding标头(RFC 2616 4.3),则它们具有正文。如果请求没有,则它没有正文,您的服务器应该这样处理它。

那说PUT请求没有身体是不寻常的,所以如果我设计一个真正想要发送空体的客户端,我会传递Content-Length:0。的确,取决于一个人的阅读对于POST和PUT方法的定义(RFC 2616 9.5, 9.6),有人可能会认为身体是隐含的 - 但是处理没有身体的合理方法是假设一个零长度的身体。

答案 1 :(得分:37)

没有回答这个问题,但断言jaxrs如何让我经常使用无体PUT:

无体放置示例: 授予用户额外的权限。

PUT / admin / users / {username} / permission / {permission}

答案 2 :(得分:5)

IETF标准不要求正文,但如果没有正文则内容长度应为0。使用适合您正在做的事情的方法。如果你把它放入代码,给定

int x;
int f(){ return x; }

和一个名为r的远程变量。

帖子相当于

r=f();

看跌期权相当于

r=x;

和get相当于

x=r;

答案 3 :(得分:-1)

如果没有内容,PUT(在动词意义上)是什么? spec将内容称为“封闭实体”,但没有内容的请求将没有封闭实体,因此无需放在服务器上。

当然,除非你想在服务器上没有任何东西,否则你可能想要一个DELETE。

答案 4 :(得分:-4)

根据HTTP / 1.1标准http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13

中的以下部分,需要内容长度字段