不向客户端返回任何内容的 POST 方法是否需要 Accept 标头?

问题描述 投票:0回答:3

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

  1. 客户端发送带有 Accept header 的 POST 为
    application/json
  2. 客户端发送带有 Accept header 的 POST 为
    application/xml

如果是情况2,服务器是否应该返回错误?

rest http-headers rfc
3个回答
3
投票

RFC 7231 描述了 Accept 标头

的语义

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

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

客户端提供的 Accept 标头可能应该反映客户端所看到的请求上下文;例如,Web 浏览器可能会合理地为

<img>
<script>
使用不同的 Accept 标头,在每种情况下都鼓励服务器提供有用的表示。

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

如果当媒体类型为 application/json 时响应的表示形式为

零字节长
,那么我希望当媒体类型为
application/xml
时响应也为零字节长。因此,对我来说,接受其中之一而不是另一个并不明显。


3
投票

服务器可能忽略

Accept
标头。

如果您在回复中没有返回任何内容,那就毫无意义。由您决定是否要拒绝带有

Accept
标头的请求。

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


1
投票

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

没有任何 Accept 标头字段的请求意味着用户代理 将接受任何媒体类型作为响应。如果标头字段是
出现在请求中,但没有可用的表示形式
响应具有被列为可接受的媒体类型,
源服务器可以通过发送 406 来尊重标头字段(不是 可接受的)响应或通过处理忽略标头字段 就好像它不受内容协商的约束一样进行响应。
所以要么我们可以做2

© www.soinside.com 2019 - 2024. All rights reserved.