首页 > 解决方案 > 407 代理身份验证 - 有时未发送默认凭据

问题描述

SE 上还有许多与 407 响应代码相关的其他问题,但这些问题是关于让请求完全与代理服务器一起工作,这是不同的。

在我们(基于 Windows 10)的公司环境中,我们有一个用于所有外部 Web 流量的 Web 代理,并在“设置”>“网络和 Internet”>“代理”>“手动代理设置”(在早期版本的 Windows 中也称为“Internet 选项”)中进行设置。

我们有一个 C# (.NET Framework 4.7.2) 桌面应用程序,它混合使用 HttpWebRequest 和 HttpClient 来与基于 Web 的外部 API(SOAP、REST 等)通信。对于 HttpWebRequest,我们不需要做任何特别的事情——它可以与 Web 代理一起工作,而无需设置任何特定的属性,对于 HttpClient,我们必须在 HttpClientHandler 上执行以下操作:

clientHandler.DefaultProxyCredentials = CredentialCache.DefaultNetworkCredentials;

使用 Wireshark 我可以看到它按预期工作,Web 代理最初返回 407 响应请求,然后自动重复请求,但这次包括 Proxy-Authorization 标头,一切正常。

但是,有时用户报告无法从 API 接收结果,进一步调查表明,当发生这种情况时,Web 代理会以 407 响应,但不会使用 Proxy-Authorization 标头重复请求,而是会出现异常抛出。一旦发生这种情况,所有请求都将以这种方式失败,直到发生以下情况之一:

  1. 应用程序重新启动。
  2. 一段时间过去了(由于我很少能重现这个问题,我无法缩小这是多长时间,但肯定超过 5 分钟)。
  3. 打开网络浏览器并导航到任何外部网站。这很奇怪,因为尽管浏览器正确响应了 Web 代理的 407 响应,但我不明白为什么这会对我们的应用程序产生任何影响,因为 Web 代理身份验证肯定是基于连接的。

如前所述,我偶尔可以使用桌面应用程序重现该问题,但它似乎是随机的。我试图在一个更简单的测试应用程序中重现它,但一直无法这样做。由于无法可靠地重现它,我有点卡住并且无法从 Microsoft 获得帮助,因为他们需要一个工作示例。

我会很感激任何关于问题可能是什么或我可以诊断它的方法的想法。这是我认为这是我 20 年职业生涯中第二次遇到这样的事情!

提前致谢。

标签: c#.nethttp-proxyhttp-status-code-407

解决方案


推荐阅读