return 专用 HTTP 响应的正确方法是什么?
What is the correct way to return a specialized HTTP response?
假设在我的 RESTful 界面中,我要求客户端包含一些特殊的 header,只是为了表明它是授权客户端。 (相信我;这是项目的要求。)如果 HTTP 请求在此 header 中包含不正确的值,服务器需要发回 HTTP 响应,客户端可以识别它发送了不受支持的值在 header.
使用 HTTP 发回此信息的合适方法是什么?
- 我可以发回
400 Bad Request
响应,但我该如何告诉客户问题到底是什么?显而易见的选择是在响应的 body 中包含一些消息。但是(除了 i18n 的问题)客户端盲目地显示错误消息的内容真的是个好主意吗?
- 我可以发回一个
400 Bad Request
响应,带有专有的特殊 header 表明 such-and-such header 有错误的代码。这样做的好处是客户端可以实际处理错误是什么(而不是内容中的自由文本)。那么 400
响应是否会变成 catch-all 响应,并在某些专有 header 中出现实际错误?这是一个很好的通用模式吗?但这几乎表明...
- 我可以发回一些具有专有含义的任意
4XX
响应,例如 472 Bad Foo Header Value
。微软似乎有时也走这条路。明显的问题是未来版本的 HTTP 可能会发生冲突(或与其他做过同样事情的人发生冲突)。
我想我更倾向于 400 Bad Request
,带有特殊的 header 表示错误专业化。对此用例有任何想法或经验吗?
如果特殊 header 格式不正确,那么您可以发送
400 Bad request 表示 header 错误的响应。
但是,如果 header 的唯一目的是授权而您拒绝 header,因为值无效,那么我会选择:
- 403 - 禁止,如果您希望连接被拒绝
- 401 - 未经授权,如果客户端应尝试重新验证
在响应短语中,您可以指明拒绝连接的原因。
假设在我的 RESTful 界面中,我要求客户端包含一些特殊的 header,只是为了表明它是授权客户端。 (相信我;这是项目的要求。)如果 HTTP 请求在此 header 中包含不正确的值,服务器需要发回 HTTP 响应,客户端可以识别它发送了不受支持的值在 header.
使用 HTTP 发回此信息的合适方法是什么?
- 我可以发回
400 Bad Request
响应,但我该如何告诉客户问题到底是什么?显而易见的选择是在响应的 body 中包含一些消息。但是(除了 i18n 的问题)客户端盲目地显示错误消息的内容真的是个好主意吗? - 我可以发回一个
400 Bad Request
响应,带有专有的特殊 header 表明 such-and-such header 有错误的代码。这样做的好处是客户端可以实际处理错误是什么(而不是内容中的自由文本)。那么400
响应是否会变成 catch-all 响应,并在某些专有 header 中出现实际错误?这是一个很好的通用模式吗?但这几乎表明... - 我可以发回一些具有专有含义的任意
4XX
响应,例如472 Bad Foo Header Value
。微软似乎有时也走这条路。明显的问题是未来版本的 HTTP 可能会发生冲突(或与其他做过同样事情的人发生冲突)。
我想我更倾向于 400 Bad Request
,带有特殊的 header 表示错误专业化。对此用例有任何想法或经验吗?
如果特殊 header 格式不正确,那么您可以发送 400 Bad request 表示 header 错误的响应。
但是,如果 header 的唯一目的是授权而您拒绝 header,因为值无效,那么我会选择:
- 403 - 禁止,如果您希望连接被拒绝
- 401 - 未经授权,如果客户端应尝试重新验证
在响应短语中,您可以指明拒绝连接的原因。