2010-07-20 67 views
50

我在写一个仅接受json的web服务,而且只输出json。HTTP 406和415错误代码

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

看来,我有两个选择:

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

这将是巨大的,如果有人能赐教,以语义这两个代码。

回答

99

服务器根据接受请求头(即它们有一个Accept头,它声明它们只有只有需要XML)而无法响应时返回406。

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

so .. 406当你不能发送他们想要的,415当他们发送你不想要的东西时。

希望有帮助!

3

当客户端使用Accept标头请求不支持的内容类型(在您的情况下,除JSON以外的任何内容)的响应时使用406。另一方面,当客户端POST或PUT数据处于不支持的内容类型时,会使用415。

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

参见RFC 2616的定义:406415

5

引述RFC2616

406不可接受

由请求 所标识的资源只能生成响应 实体其中内容 特征不可接受 根据接受头文件sen t请求中的 。

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

415不支持的媒体类型

服务器拒绝,因为 请求的实体是不为 请求方式的请求源支持 的格式以服务 请求。

只是返回415 Unsupported Media Type应该是“客户端发送的内容不是JSON,不能使用”的最小响应。不知道是否有标题表明“您需要发送JSON”

-2

RFC2616可以帮助您!

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

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

我会选择415,它适合你的描述相当不错。

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

+0

他需要两种不同的场景 – nathan 2010-07-20 21:37:20

+0

我讨厌你可以直接回答的问题。他们在得分方面很出色,但需要快速和正确的回应。 :/ – Cheery 2010-07-20 21:48:15

31
  • 406如果发送了Accept标头,则无法填满。
  • 415如果发送了Content-Type,则不能使用。