HTTP 406和415错误代码


68

我正在编写仅接受json,并且仅输出json的网络服务。

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

看来我有两个选择:

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

如果有人能启发我这两个代码的语义,那将是非常不错的。


如何获得“可服务”内容类型列表?
MUY比利时

Answers:


138

当服务器基于接受请求标头而无法响应时,服务器将返回406(即服务器具有一个接受标头,表明它们需要XML)。

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

所以.. 406当您不能发送他们想要的东西时,415当他们发送您不需要的东西时。

希望有帮助!


43
  • 406如果Accept已发送标头,则无法完全填写。
  • 415如果Content-Type发送了a,则无法使用。

8

引用RFC2616

406不可接受

由请求标识的资源仅能够生成响应实体,该响应实体具有根据请求中发送的接受标头不可接受的内容特征。

当客户端查询您的服务时,请检查Accept* 其发送了哪些标头;如果不匹配application/json(或通配符,例如*/*),则返回此值。响应应指示“我们仅在此处提供JSON”。

415不支持的媒体类型

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

仅仅返回415 Unsupported Media Type应该是“客户端发送的不是JSON的东西,不能使用它的东西”的最小响应。不知道是否有标题指示“您需要发送JSON”


4

当客户端使用Accept标头请求不支持的内容类型(在您的情况下,除JSON之外的任何其他内容)响应时,使用406。另一方面,当客户端以不受支持的内容类型发布或发布数据时,将使用415。

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

有关其定义,请参见RFC 2616:406415


-2

RFC2616可以帮助您!

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

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

我会选择415,它非常适合您的描述。

编辑:哦。我知道了。“请求的实体的格式不受请求的资源支持”。因此,如果您有一个包含内容的请求,并且该内容的类型错误,则应抛出415-响应。


他需要两种不同的场景
森(Nathan)2010年

我讨厌您可以按照规范回答的问题。他们得分高,但需要快速正确的回应。:/
令人愉快的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.