我有一个支持内容类型为 JSON(仅)的 POST 方法的端点。但是 POST 请求除了状态代码之外,不会在响应正文中返回任何内容。在这种情况下,正确的行为是什么?
application/json
application/xml
如果是情况2,服务器是否应该返回错误?
RFC 7231 描述了 Accept 标头
的语义没有任何 Accept 标头字段的请求意味着用户代理将接受任何媒体类型作为响应。
如果请求中存在标头字段,并且响应的可用表示均不具有被列为可接受的媒体类型,则源服务器可以通过发送 406(不可接受)响应来尊重标头字段,或者忽略通过将响应视为不受内容协商影响的标头字段。
客户端提供的 Accept 标头可能应该反映客户端所看到的请求上下文;例如,Web 浏览器可能会合理地为
<img>
和 <script>
使用不同的 Accept 标头,在每种情况下都鼓励服务器提供有用的表示。
在 POST 的情况下,您尝试协商的是“操作的状态或从该操作获得的结果”的表示,而不是资源本身的表示。
如果当媒体类型为 application/json
时响应的表示形式为
零字节长,那么我希望当媒体类型为
application/xml
时响应也为零字节长。因此,对我来说,接受其中之一而不是另一个并不明显。
服务器可能忽略
Accept
标头。
如果您在回复中没有返回任何内容,那就毫无意义。由您决定是否要拒绝带有
Accept
标头的请求。
但我认为大多数系统都不会拒绝这些请求。
https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.2
没有任何 Accept 标头字段的请求意味着用户代理 将接受任何媒体类型作为响应。如果标头字段是
出现在请求中,但没有可用的表示形式
响应具有被列为可接受的媒体类型,
源服务器可以通过发送 406 来尊重标头字段(不是 可接受的)响应或通过处理忽略标头字段 就好像它不受内容协商的约束一样进行响应。
所以要么我们可以做2