返回不带WWW身份验证的AJAX响应的HTTP 401状态

返回不带WWW身份验证的AJAX响应的HTTP 401状态,ajax,http,authentication,http-response-codes,www-authenticate,Ajax,Http,Authentication,Http Response Codes,Www Authenticate,如果您希望传达用户未登录,即使登录机制是基于表单的,而不是基于HTTP的(基本、摘要等),返回对AJAX调用的响应的HTTP 401状态是否可以 这里的答案建议使用401: 这篇文章展示了一个使用401进行AJAX响应的实际示例: 但是,它清楚地指出,需要一个特殊的头,这意味着它只能用于HTTP身份验证 10.4.2未经授权 请求需要用户身份验证。响应必须包含WWW-Authenticate标题字段(第14.47节),其中包含适用于请求资源的质询 我想我可能会发送一个虚假的头,比如WWW-Au

如果您希望传达用户未登录,即使登录机制是基于表单的,而不是基于HTTP的(基本、摘要等),返回对AJAX调用的响应的HTTP 401状态是否可以

这里的答案建议使用401:

这篇文章展示了一个使用401进行AJAX响应的实际示例:

但是,它清楚地指出,需要一个特殊的头,这意味着它只能用于HTTP身份验证

10.4.2未经授权

请求需要用户身份验证。响应必须包含
WWW-Authenticate
标题字段(第14.47节),其中包含适用于请求资源的质询

我想我可能会发送一个虚假的头,比如
WWW-Authenticate:WebForm
,并且仍然符合W3C规范,但感觉它违反了
WWW-Authenticate
头的精神


最后,我似乎找不到明确说明是否允许HTTP 401用于AJAX响应的权威来源。有没有我错过的权威消息来源?

我想说这不好,因为401是用来告诉客户端提供http身份验证凭据的。正确的响应将是403禁止,简单地告诉客户端,无论出于何种原因,它都不允许访问资源。

我正在这样做,但我意识到我需要一种方法来区分未经验证的请求和经过验证但没有权限的请求。可以使用响应内容,但对于这样的内容,使用状态代码似乎更符合逻辑。我希望有一个权威的来源来指定如何最好地处理这个场景。除了HTTP身份验证之外,所有形式的身份验证或授权都不在HTTP协议的范围之内。因此,虽然使用cookie或其他工具实现自定义安全机制是一种常见的做法,但没有更具体地处理此类自定义实现的HTTP响应代码。403仅表示“禁止”,未给出任何具体原因。因此,与HTTP不关心的任何自定义安全机制相关的任何信息都应该在响应体中发送。我本想在这个用例中也使用401,但根据Mikael的回答,我决定坚持使用403。但是,我决定使用自定义HTTP头,而不是使用响应主体:
X-Reason:LoginRequired
。不确定这是否适合你的模特@Mikael?