2015-12-04 210 views
6

A PUT请求可以有很多结果,我想知道哪个状态代码对每个请求都是最好的。PUT的HTTP状态代码

说我想创建一个新的资源,所以我做这样的事情:

PUT http://example.com/resources/resource-1 

而且由于新的资源已创建我会得到一个HTTP 201

现在我想更新这个资源,所以我做了同样的要求,以新的内容:

PUT http://example.com/resources/resource-1 

我也得到HTTP 200HTTP 204,因为资源已被更新。但是如果我再次发送相同内容的请求,该怎么办?即使没有更新,服务器是否应该返回HTTP 200HTTP 204

我知道,HTTP 200HTTP 204都只是表示请求已成功处理,即使数据不改变请求仍然可以(和应该)仍然可以成功处理。但是有没有办法告诉客户端请求已经成功处理,但服务器端没有任何改变?如果有,是否应该用于PUT请求? PUT是幂等性的,根据服务器端的实际处理情况是否应该返回不同的状态(只要在这个处理过程中没有错误发生)?

回答

6

但有没有办法告诉客户端请求已成功处理,但在服务器端没有改变?

是的,但这不是状态码的用途。

返回200 OK和实体的表示,或者204没有内容并返回任何内容。

对于没有应用的更改,请使用类似ETag的标头。客户可以将ETag与先前的值进行比较,并确定没有任何变化。

+0

如果资源在第一个PUT请求中返回201,但在后续请求中返回200或204,那么它是否会违反幂等性(对于PUT是必需的)? – Ray

+1

@ Ray no,因为idempotence是关于server_上的结果,或者更具体地说是由请求URL标识的资源的字节内容,而不是关于响应消息的内容。服务器上的结果在相同资源的连续PUT上不会更改。 :)请看例如:[_“请注意,虽然幂等操作在服务器上产生相同的结果(无副作用),但响应本身可能不一样(例如资源状态可能会在请求之间改变)”_](http ://www.restapitutorial.com/lessons/idempotency.html)。 – CodeCaster

+0

呃......感谢您的澄清 - 完全有道理。 – Ray