Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
REST:更正被忽略帖子的HTTP响应代码_Http_Rest_Http Headers - Fatal编程技术网

REST:更正被忽略帖子的HTTP响应代码

REST:更正被忽略帖子的HTTP响应代码,http,rest,http-headers,Http,Rest,Http Headers,我们有一个REST API,客户端定期发布数据并将数据放入其中。当他们这样做时,有时他们发布的数据不会对我们的系统造成任何变化。POST和PUT格式良好,但它们发送的数据与我们数据库中的数据相同。当这种情况发生时,我刚刚发现我们正在返回400 HTTP状态。不幸的是,这意味着“错误的请求”,如“由于语法错误,服务器无法理解请求” 显然情况并非如此,但我被告知我们将使用它,因为没有其他合适的状态代码。我们考虑的选择: 304未修改。遗憾的是,这仅适用于GET请求 204没有内容。似乎很接近,但禁

我们有一个REST API,客户端定期发布数据并将数据放入其中。当他们这样做时,有时他们发布的数据不会对我们的系统造成任何变化。POST和PUT格式良好,但它们发送的数据与我们数据库中的数据相同。当这种情况发生时,我刚刚发现我们正在返回400 HTTP状态。不幸的是,这意味着“错误的请求”,如“由于语法错误,服务器无法理解请求”

显然情况并非如此,但我被告知我们将使用它,因为没有其他合适的状态代码。我们考虑的选择:

  • 304未修改。遗憾的是,这仅适用于GET请求
  • 204没有内容。似乎很接近,但禁止实体
其他选择似乎同样糟糕。我们可以使用
200ok
并在返回的XML文档中包含相关信息,但这似乎不是很“RESTish”。其他国家通常如何处理这一问题


(修复了未修改的响应代码。谢谢Mkoeller)

从客户端视图来看,如果请求内容在服务器上是否相同,则服务器状态相同,对吗?既然服务器后来保存了发送的内容,为什么服务器要以任何类型的错误状态响应呢? 另一方面,如果请求内容与服务器已知的内容相同,客户机为什么要费心呢?它已成功传输到服务器,因此大部分工作已完成。如果针对这种情况有不同的响应代码,客户机应该如何反应


结论:请求内容等于现有内容的情况不是特例。您应该使用相同的响应状态代码进行响应。可能是200、302或303。

我认为返回200 OK很好。在这种情况下,数据处理正确,服务器做了它必须做的事情。因为服务器正确地处理了数据,所以它应该返回一个OK状态代码。它在内部忽略了这一事实是或者应该是无关紧要的

服务器对数据所做的事情不应该告诉客户机,而应该告诉他们请求发生了什么(处理正常、出错等)


如果,出于某种奇怪的原因(顺便说一句,我认为这不是一个有效的原因),客户对它感兴趣,你会有反应告诉他们。如果客户能够在放置之前知道服务器上内容的实体标记,然后使用If-Match报头和412前提条件失败响应来准确描述您描述的情况。

HTTP状态302被命名为“找到”。