2009-08-05 39 views
54

我无法在标准中找到明确的规格说明。我有一个HTTP客户端在执行PUT请求时没有包含'Content-Length:0'标头,但我没有指定正文,并且服务器被这些请求弄糊涂了,我在想我应该使用哪个程序责怪。是否需要包含正文的HTTP PUT请求?

回答

46

如果HTTP请求具有Content-Length或Transfer-Encoding标头(RFC 2616 4.3),则它们具有主体。如果请求没有,它没有主体,你的服务器应该这样对待它。

也就是说,PUT请求没有任何主体是不寻常的,所以如果我设计的客户端真的想发送一个空的主体,我会通过Content-Length:0。阅读POST和PUT方法定义(RFC 2616 9.5, 9.6),人们可能会认为暗示身体是必需的 - 但是,处理任何身体的合理方法是假定零度身体。

2

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

当然,除非你想把任何东西都放到服务器上,在这种情况下,你可能需要一个DELETE。

34

不回答问题,但断言JAXRS如何让我经常使用bodyless看跌期权:bodyless放的

例子: 给用户的其他权限。

PUT /管理/用户/ {名} /许可/ {许可}

+1

正是我问题!我得出了同样的结论。但严格来说,这违背了RFC,虽然没有明确提及,但是body被称为存在的。这可能会导致问题,但根据我的经验,所有现代Web服务器/框架都可以工作。 – 2016-11-22 10:25:07

1

的主体不是由IETF标准要求,虽然内容长度应为0如果没有体。使用适合你正在做的事情的方法。如果你把它转换成代码,给

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

,并呼吁r远程变量。

赛后相当于

r=f(); 

看跌相当于

r=x; 

和GET相当于

x=r; 
+0

这是PUT vs POST我读过的最明显的例子,虽然没有主题 – 2018-01-16 14:35:48