0

我收到来自网络服务器的响应的 401 状态代码。但是,如果我捕获 401 异常并处理数据,则响应实际上包含与授权请求相同的信息 - 我有一个不同的客户端收到状态 200 和数据来确认这一点。Fiddler 也确认了数据。

我认为这是服务器的不正确行为;但是,我找不到这样的规范来确认。我已通读 RFC 2616 和 2617,最相关的片段似乎是:

如果 401 响应包含与先前响应相同的质询,并且用户代理已经尝试了至少一次身份验证,则应该向用户呈现响应中给出的实体,因为该实体可能包含相关的诊断信息。

然而,根据实体的一般定义,实体理论上可以是发送给授权请求的数据。

我会更喜欢 401 并且没有数据/身份验证数据,或者 200 有授权数据。但我担心这可能是一个缺陷并导致我在路上遇到问题。我不知道我是否正确地进行了 401 操作。

是否有任何规范规定不应将授权数据返回给生成 401 响应的客户端请求?或者这种情况是否有效?

4

1 回答 1

0

我不认为 the entity could theoretically be the data that would be sent to an authorized request.

来自RFC 2616

如果 401 响应包含与先前响应相同的质询,并且用户代理已经尝试了至少一次身份验证,则应该向用户呈现响应中给出的实体,因为该实体可能包含相关的诊断信息。

因此,将实体呈现给未经身份验证的用户是合法的。

正如您所说,authorized data should not be returned to a client...但在您的情况下,经过身份验证和未经身份验证的用户的实体都是相同的。

另一方面,Google 的登录页面用作200身份验证失败的响应代码。

注意:

响应必须包含一个 WWW-Authenticate 头字段(第 14.47 节),其中包含适用于所请求资源的质询。客户端可以使用合适的授权头域重复请求(第 14.8 节)。

原因可能是大多数浏览器在收到 WWW-Authenticate 标头字段时会打开一个弹出窗口供用户填写用户名和密码。但这是基于可能导致安全问题的纯文本。

于 2013-12-24T09:43:53.060 回答