HTTP状态401,但HTTP响应中的预期数据

时间:2013-06-07 19:06:00

标签: http web webserver authorization

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

我认为这是服务器的错误行为;但是,我无法找到确认的规格。我已阅读RFC 2616和2617,最相关的片段似乎是:

  

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

但是,根据实体的通用定义,理论上该实体可以是发送给授权请求的数据。

我会更乐于使用401而没有数据/身份验证拒绝数据,或者使用授权数据200。但我担心这可能是一个缺陷,并导致我的问题。我不知道我是否正确地接受了401.

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

1 个答案:

答案 0 :(得分: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's login page使用200作为无法进行身份验证的响应代码。

请注意:

  

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

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