0

我有一个端点,它支持内容类型为 json(仅)的 POST 方法。但是 POST 请求在其响应正文中不返回除状态代码之外的任何内容。在这种情况下,正确的行为是什么?

  1. 客户端发送带有 Accept 标头的 POSTapplication/json
  2. 客户端发送带有 Accept 标头的 POSTapplication/xml

服务器是否应该在情况 2 中返回错误?

4

3 回答 3

3

服务器可能会忽略Accept标头。

如果您在回复中没有返回任何内容,那是没有意义的。是否要拒绝带有Accept标头的请求由您决定。

但我认为大多数系统不会拒绝这些请求。

于 2019-05-15T13:49:55.540 回答
2

RFC 7231 描述了Accept标头的语义

没有任何 Accept 头字段的请求意味着用户代理将接受任何媒体类型作为响应。

如果请求中存在标头字段,并且响应的所有可用表示都没有被列为可接受的媒体类型,则源服务器可以通过发送 406(不可接受)响应来尊重标头字段或忽略标头通过将响应视为不受内容协商的影响来处理字段。

客户端提供的 Accept 标头可能应该反映客户端看到的请求的上下文;例如,Web 浏览器可能会合理地使用与 for 不同的 Accept 标头<img><script>在每种情况下都鼓励服务器提供有用的表示。

在 POST 的情况下,您尝试协商的是“操作的状态或从操作中获得的结果”的表示,而不是资源本身的表示。

如果当媒体类型为 时响应的表示长度为零字节application/json,那么我希望当媒体类型为 时响应的长度也为零字节application/xml。所以对我来说,接受一个而不接受另一个对我来说并不明显。

于 2019-05-15T15:07:34.820 回答
0

https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.2

没有任何 Accept 头字段的请求意味着用户代理将接受任何媒体类型作为响应。如果
请求中存在标头字段,
并且响应的所有可用表示都没有被列为可接受的媒体类型,则
源服务器可以通过发送 406(不可接受)响应来尊重标头字段或忽略标头通过将
响应视为不受内容协商的影响来处理字段。

所以要么关闭 2 我们可以做

于 2021-07-27T09:06:36.120 回答