在一个网页中,它使用YUI连接管理器/数据源将AJAX请求发送到服务器,如果会话(其中包含有关用户是否已通过身份验证的信息)已经超时,则那些只能通过身份验证查看的ajax响应用户应返回一个http状态码,告诉客户端会话已超时,然后客户端要么将其重定向到登录页面,要么询问他是否要扩展会话。
我的问题是,在这种情况下,哪种HTTP状态代码最适合告诉客户端会话已超时?
Wiki的HTTP状态代码列表
我所能建议的最好是带有WWW-Authenticate标头的HTTP 401状态代码。
403 请求的问题在于RFC 2616指出“授权无济于事,不应重复该请求。” (即,无论您是否通过身份验证,永远都不会访问该资源)。
401 请求的问题是它指出它们“必须包括WWW-Authenticate标头字段”。正如有人指出的那样,在WWW- Authenticate标头中使用自定义值似乎没有违反规范。
我在RFC 2617中看不到任何原因,为什么HTTP 401状态与这样的自定义WWW-Authenticate标头结合在一起是不可行的:
WWW-Authenticate: MyAuthScheme realm="http://example.com"
该OAuth规范实际上似乎只做这一点,因为他们推荐这个(虽然他们使我想起了RFC的奇解释):
WWW-Authenticate: OAuth realm="http://server.example.com/"
RFC似乎没有对此进行专门的制裁,但是我实际上看不到它被它禁止了(它似乎与任何“必须”,“不得”,“应该”或“不应”条件都没有冲突)。
我希望对于超时和CSRF令牌无效之类的问题,有一个更具体的HTTP状态代码,这样更清楚了。