返回专门的HTTP响应的正确方法是什么?

时间:2015-06-11 18:24:25

标签: rest http httpresponse

让我们说在我的RESTful界面中,我要求客户端包含一些特殊的标题,只是为了表明它是一个授权客户端。 (相信我;这是项目的要求。)如果HTTP请求在此标头中包含不正确的值,则服务器需要发回HTTP响应,客户端可以识别它在标头中发送了不受支持的值。

使用HTTP发回这些信息的适当方法是什么?

  • 我可以发回400 Bad Request响应,但是如何告诉客户端问题到底是什么?显而易见的选择是在响应正文中包含一些消息。但是(除了i18n的问题)客户端盲目地显示错误消息的内容真的是一个好主意吗?
  • 我可以发回一个400 Bad Request响应,其中有一个专有的特殊标题,表明这样的标题包含错误的代码。这样做的好处是客户端可以实际处理错误(与内容中的自由文本相对)。那么400响应是否会成为一个包罗万象的响应,并且某些专有标头中存在实际错误?这是一个很好的一般模式吗?但这几乎表明......
  • 我可以发回一些具有专有含义的4XX响应,例如472 Bad Foo Header Value。微软似乎有时走这条路。显而易见的问题是未来版本的HTTP(或与其他人做过同样事情)发生冲突的可能性。

我想我更倾向于400 Bad Request,并带有一个特殊的标题,指示错误的专业化。有关此用例的任何想法或经验吗?

1 个答案:

答案 0 :(得分:1)

如果特殊标题格式不正确,那么你可以发送一个 400错误请求表示标头错误的响应。

但是如果标题的唯一目的是授权并拒绝标题,因为值无效,那么我会选择:

  1. 403 - 禁止,如果您想拒绝连接
  2. 401 - 未经授权,如果客户端应尝试重新验证
  3. 在“响应”短语中,您可以指出拒绝连接的原因。