Firefox 的扩展 API 可以为单个请求做出代理决定。当请求带有有效的标签页归属时,扩展可以将它的标签页 ID 与用户所选标签页进行比较。

对于现有 Firefox 扩展的后台脚本,路由片段可以写成:

browser.proxy.onRequest.addListener(details => {
  if (details.tabId === selectedTabId) {
    return {type: 'http', host: 'proxy.example', port: 8080};
  }
  return {type: 'direct'};
}, {urls: ['<all_urls>']});

扩展从自己的用户选择逻辑中提供 selectedTabId。它的 HTTP 主机和整数端口可以来自HTTP 代理列表,用于经许可的公开标签页测试。它需要代理权限以及覆盖已过滤 URL 的主机权限。

这与 PAC 脚本不同:PAC 按 URL 和主机作出的标准判断无法识别浏览器标签页。这也不同于在另一个标签页加载时修改 Firefox 的全局手动代理。

要考虑浏览器的基础配置:ProxyInfo 的 direct 值不会覆盖用户已配置的代理。请检查基础策略和回退行为,而不要承诺每个未匹配的请求都会直连。

部分流量缺少可靠的标签页信息,Mozilla 也记录了 HTTP/3 代理连接的归属不准确。这说明的是请求路由,而不是保证与某个浏览任务相关的每条连接都按标签页隔离。扩展专用的容器路由是另一种值得评估的模型。

相关文章