按 HttpClient 文档化的环境代理策略,example.internal 与 .example.internal 的匹配方式不同。裸名称选择父主机,带前导点的形式选择其子域。

如果两者都应直连,请在启动环境中同时写入两者:

export no_proxy='example.internal,.example.internal'

把它们并入你打算保留的现有绕过列表。在变量名区分大小写的系统上,.NET 会先检查小写的代理环境变量,再检查大写形式,因此过时的 no_proxy 可能优先于 NO_PROXY。

在应用程序内部,无需向目标发出 HTTP 请求即可检查默认选择器。

foreach (var host in new[] {
    "example.internal", "api.example.internal", "other.internal"
})
{
    var uri = new Uri("https://" + host + "/");
    Console.WriteLine($"{host}: bypass={HttpClient.DefaultProxy.IsBypassed(uri)}");
}

该片段使用了 System 和 System.Net.Http。若应用明确提供了另一个 IWebProxy,则应改为检查处理程序实际的代理。请在默认代理初始化之前设置好目标环境。

这些是 .NET 文档化的规则。用同一字符串得到的 curl 结果并不能证明另一个客户端选择了相同路径,而绕过决策仍然需要网络可直连。

相关文章