HTTP 401 - 什么是适当的WWW-Authenticate标头值?

时间:2009-11-17 11:55:36

标签: http-headers xmlhttprequest

我正在处理的应用程序有一个会话超时值。如果用户之间的交互时间不超过此值,则会尝试加载下一页,然后系统会提示他们登录。

所有发出的请求都通过此机制进行路由,其中​​包括AJAX调用。最初我们在登录页面上发送了200个头文件,这引入了AJAX的一些问题,因为如果发送了200个响应,则运行代码,并且从这些RPC调用发回的大多数数据是JSON或得到评估的原始JavaScript(不问:|)。

我建议401更好,因为我们的JSON解析器不会尝试使用HTML登录页面.. :))

但是,reading the spec时,我发现还必须发送 WWW-Authenticate 字段。

这个领域有什么好处? Application Login会满足吗?

3 个答案:

答案 0 :(得分:62)

当指示HTTP基本身份验证时,我们返回如下内容:

WWW-Authenticate: Basic realm="myRealm"

Basic是方案,而其余部分则非常依赖于该方案。在这种情况下,领域只是为浏览器提供一个文字,当提示输入用户ID和密码时,该文字可以显示给用户。

你显然没有使用Basic,因为使用Basic Auth时没有会话到期的意义。我假设你正在使用某种形式的基于表单的身份验证。

从回忆中,Windows Challenge Response使用不同的方案和不同的参数。

诀窍在于,由浏览器决定它支持哪些方案以及它如何响应它们。

我的直觉是,如果您使用基于表单的身份验证,请继续使用200 +重新登录页面,但添加一个浏览器将忽略的自定义标头,但您的AJAX可以识别。

要获得非常好的User + AJAX体验,请让脚本继续查找发现会话过期的AJAX请求,通过弹出窗口发出重新登录请求,并在成功时重新提交原始AJAX请求并继续执行正常。

避免作弊只是让脚本每隔5分钟到达网站以保持会话活跃,因为这会破坏会话到期点。

另一种选择是刻录AJAX请求,但用户体验不佳。

答案 1 :(得分:6)

不,您必须指定要使用的身份验证方法(通常为“基本”)和身份验证领域。有关示例请求和响应,请参阅http://en.wikipedia.org/wiki/Basic_access_authentication

您可能还想阅读RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication

答案 2 :(得分:-7)

当用户会话超时时,我发回HTTP 204状态代码。请注意,HTTP 204状态不包含任何内容。在客户端我这样做:

xhr.send(null);
if (xhr.status == 204) 
    Reload();
else 
    dropdown.innerHTML = xhr.responseText;

这是Reload()函数:

function Reload() {
    var oForm = document.createElement("form");
    document.body.appendChild(oForm);
    oForm.submit();
    }