2015-06-11 134 views
0

假设在我的RESTful接口中,我需要客户端包含一些特殊的头文件,以表明它是授权客户端。 (请相信我;这是项目的一项要求。)如果HTTP请求在此头中包含不正确的值,则服务器需要发回一个HTTP响应,客户端可以识别它在头中发送了不支持的值。返回专门的HTTP响应的正确方法是什么?

什么是使用HTTP发回此信息的适当方式?

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

我想我更倾向于400 Bad Request与一个特殊的标题指示错误专业化。对这个用例有任何想法或经验?

+0

“Guidance”==“也许不属于[so]”。 –

+0

Puleaze。如果您不喜欢“指导”一词,我会将其更改为“返回自定义HTTP响应的最佳方式”?请看整个句子的语义。 –

+0

我的意思是你正在寻求指导而不是问一个特定的编程问题。 [so]不是指导的地方。我可以轻易地投票决定将此视为“主要基于观点的”,因为您“倾向于”,因为您正在寻找“想法或经验”。 –

回答

1

如果特殊标题格式不正确,则可以发送 400错误请求指示标题错误的响应。

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

  1. 403 - 禁止,如果你想连接被拒绝
  2. 401 - 未经授权,如果客户端应该尝试重新进行身份验证

在响应短语可以指示拒绝连接的原因。

+0

是的,但如果它是一个认证或授权标题,那么不要过于具体的原因!只是“未经授权”就足够了。 –

+0

问题是,如果我们发回'401'或'403',客户端将尝试重新进行身份验证并弹出一个对话框,要求重新输入用户的凭据。我想我们可以添加一个特殊的标题,指明被禁止的确切原因,以便客户端可以区分它和认证问题,但是我们可以用'400'做同样的事情。 –

+0

它是一个Javascript客户端吗?然后,一个ajax post请求,错误处理将做的伎俩。 http://stackoverflow.com/questions/2833951/how-to-catch-ajax-query-post-error – Nils

相关问题