HTTP 406和415错误代码

我正在编写一个只接受 json 并且只输出 json 的 Web 服务。

因此,如果请求其他格式,我需要返回适当的状态代码。

看来我有两个选择:

  1. 406-不可接受
  2. 415-不支持的媒体类型

如果有人能告诉我这两个代码的语义,那就太好了。

40759 次浏览

当服务器无法根据接受请求头(即它们有一个 Accept 头,其中表明它们 只有想要 XML)来响应时,服务器将返回406。

当发送请求的实体(POST 或 PUT 中的内容)具有不受支持的中介类型(即发送 XML)时,服务器返回415。

所以,当你不能发送他们想要的东西时是406,当他们发送你不想要的东西时是415。

希望能帮上忙!

当客户端使用 Accept 头以不受支持的内容类型(在您的示例中是 JSON 以外的任何类型)请求响应时,将使用406。另一方面,当客户端 POST 或 PUTs 数据处于不受支持的内容类型时,则使用415。

简而言之: 如果不能以预期的格式输出,则使用406; 如果不支持输入格式,则使用415。

有关它们的定义,请参见 RFC 2616: 406415

引用 RFC2616的话:

406不可接受

由请求标识的资源 只能产生反应 有内容的实体 不可接受的特征 根据发送的接收标题 在请求中。

当客户端查询您的服务时,检查它发送了什么 Accept*头; 如果它不匹配 application/json(或通配符,例如 */*) ,返回这个。响应应该表明“我们在这里只提供 JSON”。

415不支持的媒体类型

服务器拒绝为 请求,因为 请求的格式不受支持 所请求的资源 所要求的方法。

仅仅返回 415 Unsupported Media Type应该是“客户端已经发送了非 JSON 的内容,无法使用”的最小响应; 不确定是否有一个表示“您需要发送 JSON”的头

RFC2616帮助您!

Http://www.rfc2616.com/#10.4.7

Http://www.rfc2616.com/#10.4.16

我会选415,很符合你的描述。

编辑: 哦。IC.“ 请求的实体是所请求的资源不支持的格式”。因此,如果您有一个包含内容的请求,而该内容的类型是错误的,则应该抛出415-response。

  • 如果发送了 Accept头,则无法完成。
  • 如果发送了 Content-Type,则不能使用。