【发布时间】:2013-05-16 08:51:15
【问题描述】:
我在 Chrome 取消一些 HTTP 请求时遇到了一些问题,我怀疑缓存的身份验证数据是原因。让我先写下我正在编写的应用程序的一些重要因素。
- 一段时间以来,我一直在使用 基本身份验证 方案来保护我的网络应用中的多个服务和资源。
- 与此同时,我使用 Chrome 大量使用/测试该应用程序,并且我的主 Google 帐户已完全同步。大多数情况下,我使用我的名字 - “lukasz” - 作为 Basic Auth 中的用户名。
- 最近我已将我的应用程序切换为使用摘要式身份验证。
- 现在,我发出的一些 HTTP 请求在没有明显原因的情况下以
status=failed失败。只有当我使用用户“lukasz”时才会发生这种情况,如果我输入其他唯一的用户名 - 没有问题。
我到处查看后端和前端,但找不到问题出在我们的代码中。每次我都可以使用用户“lukasz”轻松重现这一点。所以我将我的代码恢复为基本身份验证(而不涉及应用程序的其余部分),问题就消失了。
这让我认为缓存密码有问题。所以我清除了 Chrome 中的缓存,但这并没有帮助。经过几个小时的分析后,我决定确保我正在运行新的 Chrome 实例,因此我重新安装了它(沿途删除了磁盘数据)。 太棒了!问题消失了,我无法再重现。 然后我将我的 Google 帐户与这个新安装的 Chrome 同步,不久之后对我的应用的请求再次开始失败!!因此,我对此进行了更深入的研究(从磁盘中清除配置文件数据并重做所有步骤),确实看起来问题在我的帐户与云同步后就开始了!
是的,我知道这听起来很狡猾。听起来很荒谬。听起来很愚蠢。但我几乎可以肯定这两个问题在某种程度上是相关的(请求失败和帐户同步)。
我的想法是这样的:Chrome 不知何故记得我在某些服务中使用了带有 Basic Auth 的“lukasz/my-pass”。在我切换到 Digest Auth 之后,相同的凭据组合(lukasz/my-pass)现在表现得很有趣。也许在底层 Chrome 仍然认为这是 Basic Auth 并在得知其他情况时取消请求?
更新:
我用chrome://net-internals/ 做了一些低级调试,看来问题出在读取缓存条目时。这似乎证明了我最初的假设。
我做了一些调查,发现this article。显然,总是在我的 http 响应中添加“Last-Modified”标头已经解决了 Chrome 中的问题(我在 FF 中仍然遇到一些问题,但这是题外话)。
但是,它仍然不能完全解决我的问题。为什么请求一开始就失败了?
【问题讨论】:
标签: google-chrome authentication basic-authentication digest-authentication