HTTP 401 – 什么是适当的WWW-Authenticate标头值?
我正在处理的应用程序有一个会话超时值。 如果用户没有交互的时间超过这个值,他们尝试加载的下一个页面将被提示login。
所有发出的请求都通过这个包含AJAX调用的机制进行路由。 最初,我们发送了一个包含login页面的200头文件,它引入了AJAX的一些问题,因为如果发送200响应,代码就会运行,并且从这些RPC调用返回的大部分数据是JSON或者被评估的原始JavaScript问:|)。
我build议401更好,因为我们的JSONparsing器不会尝试消费HTMLlogin页面。:)
但是,在阅读规范时,我注意到WWW-Authenticate
字段也必须发送。
这个领域有什么价值? Application Login
足够?
当指示HTTP基本authentication时,我们返回类似于:
WWW-Authenticate: Basic realm="myRealm"
而Basic
是这个scheme,其余的则非常依赖于这个scheme。 在这种情况下,领域只是向浏览器提供一个文字,在提示input用户名和密码时可以显示给用户。
你显然不使用Basic,但是因为在使用基本authentication时没有会话过期的问题。 我假设你正在使用某种forms的基于表单的身份validation。
从回忆中,Windows质询响应使用不同的scheme和不同的参数。
诀窍是由浏览器决定它支持哪些scheme,以及如何响应这些scheme。
我的感觉,如果你使用基于表单的身份validation是留在200 +login页面,但添加一个自定义标题,浏览器将忽略,但您的AJAX可以识别。
对于一个非常好的用户+ AJAX体验,让脚本挂在发现会话过期的AJAX请求上,通过popup窗口发出重新login请求,并在成功时重新提交原始的AJAX请求并照常进行。
避免只是让脚本每5分钟打一次网站的作弊才能保持会话的正常运行,因为这样会导致会话失效。
另一种select是刻录AJAX请求,但这是一个糟糕的用户体验。
不,您必须指定要使用的身份validation方法(通常为“基本”)和身份validation领域。 有关示例请求和响应,请参见http://en.wikipedia.org/wiki/Basic_access_authentication 。
您可能还想阅读RFC 2617 – HTTP身份validation:基本和摘要访问身份validation 。
当用户会话超时时,我发回一个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(); }