HTTP GET与204无内容:这是正常的(HTTP Get with 204 No Content

2019-08-01 07:32发布

它是一个HTTP GET请求有状态码的响应中的正常现象204 - No Content ? 像,这是相对于什么样的HTTP GET应该完成的语义正确的? 我知道,一个204 - No Content正常HTTP POST请求 。 对于GET请求时,如果没有数据要被发送回,是204个状态码合适? 我应该使用404,或只是坚持200的成功,但有一个空的回应?

用例的这个问题是我写的谷歌应用程序引擎的Java应用程序。 我发送给一个servlet的请求,但数据发送回客户端将通过一个通道API插座,而不是在HTTP响应进行传输。 目前,我的客户端发送一个请求体中没有内容的POST,并等待204响应从servlet回来投票前的通道API接口。 因为没有数据我在请求主体发送,我辩论是否更有意义对我来说,发送GET而不是POST的。

Answer 1:

204无内容

服务器已经履行了请求,但不需要返回一个实体主体,并且可能要返回更新的元信息。 该响应可以包括在实体头,其如果存在的话应该与所请求的变体相关联的形式的新的或更新的元信息。

按照RFC一部分的状态代码204 ,它似乎我GET请求一个有效的选择。

一个404 Not Found200 OK空体和204 No Content具有完全不同的含义,有时候我们不能用正确的状态代码,但弯曲的规则,他们会回来咬你一天或更高版本 。 所以,如果你可以使用适当的状态代码,使用它!

我想GET或POST的选择是非常个人化的为他们两个会做的工作,但我会建议你保持一个POST而非GET来,原因有二:

  • 你想其他部分(如果我理解正确的servlet的)要执行的动作没有从中获取一些数据。
  • 默认情况下,如果没有出现在URL参数GET请求可缓存,后是没有的。


Answer 2:

用HTTP响应204的一个POST的当前组合是好的。

使用POST作为一个GET通用替换不是由RFC支持,因为每个人都有自己特定的目的和语义。

一个GET的目的是为了获取资源。 因此,尽管允许的,一个HTTP 204不会是最好的选择,因为内容在响应预期。 一个HTTP 404未找到或HTTP 410飘如果服务器无法提供所请求的资源将是更好的选择。

RFC还特别提出的HTTP 204作为用于PUT,POST和DELETE适当的响应,但是省略了它GET。

看到了GET的语义RFC 。

有迹象表明,也可以被返回的其他响应码,表示没有内容,这将是比HTTP 204更合适。

例如,对于有条件的GET,你可以收到一个HTTP 304未修改响应这将不包含主体内容。



Answer 3:

我用GET / 204与一个RESTful的集合,是已知的固定长度,但有孔的位置阵列。

GET /items
    200: ["a", "b", null]

GET /items/0
    200: "a"

GET /items/1
    200: "b"

GET /items/2
    204:

GET /items/3
    404: Not Found


Answer 4:

该POST / 204与GET似乎首先映入眼帘的罚款,也可以工作。

文件说,2XX - 这个类的状态代码表示客户端请求被接收,理解,接受,并成功处理的动作。 而4XX - 该4XX类的状态代码是用于在客户端似乎有错误的情况。

因为,该请求被成功接收,理解和服务器处理。 其结果是,资源没有被发现。 所以,在这种情况下,这是不是在客户端错误或客户端没有错误的。

因此,这应该是一个系列2XX代码,而不是4XX。 在这种情况下发送204(无内容)会比404或410响应更好。



文章来源: HTTP Get with 204 No Content: Is that normal