API расширений Firefox может принимать решение о прокси для отдельного запроса. Если запрос имеет корректную привязку к вкладке, расширение может сравнить 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-прокси для разрешённого теста в публичной вкладке. Нужны разрешение proxy и разрешения хоста, покрывающие отфильтрованные URL.

Это отличается от скрипта PAC, стандартное решение которого по URL и хосту не определяет вкладку браузера. Это также отличается от смены глобального ручного прокси Firefox, пока загружается другая вкладка.

Учитывайте базовую конфигурацию браузера: значение direct в ProxyInfo не переопределяет прокси, заданный пользователем. Проверяйте базовую политику и поведение при отказе, а не обещайте, что каждый несовпавший запрос пойдёт напрямую.

У части трафика нет достоверных сведений о вкладке, и Mozilla документирует неточную привязку для прокси-соединений по HTTP/3. Это иллюстрирует маршрутизацию запросов, а не гарантию того, что каждое соединение, связанное с задачей просмотра, изолировано по вкладке. Маршрутизация через контейнеры, специфичная для расширения, — ещё одна модель для оценки.

Похожие статьи