HTTP 406和415错误代码

时间:2010-07-20 21:24:51

标签: web-services http http-headers

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

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

看来我有两个选择:

  1. 406 - 不可接受
  2. 415 - 不支持的媒体类型
  3. 如果有人可以启发我关于这两个代码的语义,那将会很棒。

5 个答案:

答案 0 :(得分:118)

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

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

415。

所以.. 406当你无法发送他们想要的东西时,415当他们发送你不想要的东西时。

希望有所帮助!

答案 1 :(得分:37)

  • 406如果发送了Accept标题,则无法满足。
  • 415如果发送Content-Type则无法使用。

答案 2 :(得分:7)

引用RFC2616

  

406不可接受

     

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

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

  

415不支持的媒体类型

     

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

只返回415 Unsupported Media Type应该是“客户端发送的东西不是JSON的最小响应,不能用于”;不确定是否有标题表示“你需要发送JSON”

答案 3 :(得分:4)

当客户端使用Accept标头以不受支持的内容类型(在您的情况下,除JSON之外的任何内容)请求响应时,使用

406。另一方面,当客户端以不支持的内容类型POST或PUT数据时,使用415。

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

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

答案 4 :(得分:-2)

RFC2616可以帮助您!

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

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

我会选择415,它很适合你的描述。

编辑:哦。我知道了。 “请求的实体采用所请求资源不支持的格式”。因此,如果您有内容请求且内容类型错误,则应抛出415响应。