Chrome 扩展关闭还是直接模式:究竟哪个代理在生效
“关闭”这个标签可能意味着直接模式、系统模式或已清除的设置。动手之前,先读 Chrome 中实际生效的代理来源。
扩展显示“关闭”,工具栏图标是灰的,浏览器却仍然从某个意想不到的地方出网。这不是 Chrome 界面的故障。扩展的“关闭”按钮只是应用自己的标签,它底下做的事情是几种代理操作之一,后果各不相同。在再切换任何东西之前,先读实际生效的设置及其来源,因为答案已经显示在那里了。
读实际生效的设置,以及是谁设置的
在受影响的配置文件里打开 chrome://net-internals/#proxy。该页面会显示实际生效的代理配置,更有用的是显示提供它的来源,这告诉你眼前是扩展、系统配置、策略,还是浏览器内置的东西。把它与扩展的说法对比,不一致通常立刻点出元凶。这一步只读,所以在改动任何设置之前先做。
接着打开 chrome://policy,检查与代理相关的策略。受管策略的优先级高于扩展自身的设置,所以一个自称处于活动状态的扩展,可能实际上已被推翻,而它显示的却是完全诚实的状况。
如果两个页面互相吻合,出口却依然不对,剩下的候选就在浏览器之外。
三种都像“关闭”的操作
代理 API 暴露的是模式,而不是单一开关。扩展可以设为直接模式,即浏览器对它覆盖的连接不使用任何代理。它也可以设为系统模式,把决定权交回操作系统配置。或者它可以清除自己的设置,从而移除该设置,让其他生效的东西接管。这是三种不同的结果,只有一种才是用户心里“关闭”的意思。
这个区别很重要,因为按钮上的标签是扩展作者选的,不是 Chrome 选的。
| Operation | What Chrome does with it |
|---|---|
| Set direct mode | No proxy for the covered browser connections |
| Set system mode | Use the operating system proxy configuration |
| Clear the extension setting | Remove that scope's setting; the effective result depends on the remaining layers |
代理 API 参考记录了直接模式与系统模式,并指出系统模式并不等于把配置留空。那一句话就是全文的浓缩。
层与层不一致时,找出真正的主人
Chrome 会合并多个来源的设置,赢家由优先级决定,而不是你点击的先后。策略在扩展之上,扩展又在操作系统配置之上,所以工作管理的代理可能获胜,而个人扩展在自己的弹窗里看起来处于停用状态。要读实际值和它报告的来源,而不是凭记忆去推演那条层级链。
停用扩展、卸载扩展和清除它的设置也是三个不同的动作,只有最后一个才会明确删掉它存下的东西。
无痕模式又多出一层范围。扩展可以为无痕窗口单独保存设置,所以普通窗口里的测试证明不了私密窗口的任何事,而清除一个范围会留下另一个不动。
直接模式不代表什么
直接意味着在这个 API 层没有浏览器代理。它不意味着连接绕过了操作系统的 VPN、逃出了防火墙,或变成明文。如果设备上有全隧道 VPN,直接流量依然进入那条隧道,你观察到的公网地址仍然会是 VPN 出口。把这两件事混为一谈,就会出现用户关掉扩展却什么变化也没看到的困惑局面。
把两层分开测试:内页里浏览器实际生效的代理来源,以及同一台机器上浏览器请求和终端命令各自看到的公网地址。
一次只改一处,再重新测试
改一层,然后在测试其他任何东西之前重新读实际设置。为了拿到不同出口而去清除受管代理,正是支持调查变成违反策略的那一步,所以这件事要交给策略的所有者来决定。把改动前后的来源值记进工单;否则下一位工程师会把整个流程重走一遍。
一个装着三个扩展、一条公司策略和一个系统代理的浏览器配置文件,有四个看似合理的“主人”,而真正在回答的只有其中一个。