排查网络干扰问题

概览
目标: 修复开发代理运行时应用丢失连接的问题
时间: 5 分钟
插件: 没有
先决条件:设置开发代理

某些应用程序在开发代理运行时会丢失网络连接,即使它们的 URL 不在您的列表urlsToWatch中也是如此。 本文介绍它发生的原因以及如何修复它。

症状

  • 开发代理启动时,Outlook、WhatsApp 或其他桌面应用等应用程序停止工作
  • 即使未监视其 URL,应用也会显示连接错误
  • 停止开发代理服务器时,网络连接会立即恢复

原因

当开发代理自行注册为系统代理(默认行为)时,计算机上的所有 HTTP/HTTPS 流量都会流经它。 某些应用程序使用 证书固定,这意味着它们只接受由特定证书签名的连接。 由于开发代理使用自己的证书来截获流量,因此这些应用会拒绝连接并失去网络访问权限。

此问题在 Windows 上最为常见,应用程序会自动使用系统代理设置。

Solutions

选择最适合工作流的解决方案:

选项 1:排除 Windows 代理设置中的 URL

在 Windows 代理设置中添加有问题的域的例外。 流向这些域的流量完全绕过了开发代理。

  1. 打开 设置>网络和 Internet>代理

  2. “手动代理设置”下,查找 “使用代理服务器”(以以下条目开头的地址除外)

  3. 添加遇到问题的域,用分号分隔。 例如:

    *.outlook.com;*.office.com;*.whatsapp.com;*.whatsapp.net
    
  4. 选择“保存

流向这些域的流量现在会绕过开发代理,而其他流量仍会流经其中。

选项 2:禁用系统代理模式

如果不需要开发代理来截获来自所有应用程序的流量,请禁用系统代理,并仅配置目标应用程序以使用代理。

使用命令行

在不注册为系统代理的情况下启动开发代理:

devproxy --as-system-proxy false

使用配置文件

将此设置添加到 devproxyrc.json 中。

{
  "asSystemProxy": false
}

然后,通过设置 https_proxy 环境变量将应用程序配置为使用开发代理:

set https_proxy=http://127.0.0.1:8000
export https_proxy=http://127.0.0.1:8000
export https_proxy=http://127.0.0.1:8000

通过此设置,只有遵循 https_proxy 环境变量的应用程序通过开发代理发送流量。 其他应用程序直接连接到 Internet。

选项 3:仅监视特定进程

使用watchProcessNameswatchPids设置以仅截获来自特定应用程序的流量。 此方法仍将开发代理注册为系统代理,但会限制哪些进程截获了流量。

{
  "watchProcessNames": ["node", "dotnet"]
}

另请参阅