小编典典

应该使用什么http状态代码来告诉客户端会话已超时?

ajax

在一个网页中,它使用YUI连接管理器/数据源将AJAX请求发送到服务器,如果会话(其中包含有关用户是否已通过身份验证的信息)已经超时,则那些只能通过身份验证查看的ajax响应用户应返回一个http状态码,告诉客户端会话已超时,然后客户端要么将其重定向到登录页面,要么询问他是否要扩展会话。

我的问题是,在这种情况下,哪种HTTP状态代码最适合告诉客户端会话已超时?

Wiki的HTTP状态代码列表


阅读 418

收藏
2020-07-26

共1个答案

小编典典

我所能建议的最好是带有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状态代码,这样更清楚了。

2020-07-26