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