Проверке прокси в расширении Chrome нужен адресат с предсказуемым ответом. Используйте HTTPS-конечную точку, которую контролируете вы, например такую, что возвращает небольшой объект JSON с адресом, который она видит.

Выполните запрос из контекста расширения, например из его service worker или страницы расширения, указав конечную точку в host permissions манифеста:

"host_permissions": ["https://probe.example/*"]

Разрешение хоста не даёт content script тех же прав между источниками. Держите проверку в контексте расширения, а не предполагайте, что внедрённый скрипт может отправить тот же запрос.

async function probe() {
  const controller = new AbortController();
  const timer = setTimeout(() => controller.abort(), 5000);
  try {
    const response = await fetch('https://probe.example/ip', {
      cache: 'no-store',
      signal: controller.signal,
    });
    if (!response.ok) throw new Error(`HTTP ${response.status}`);
    const result = await response.json();
    if (typeof result.ip !== 'string') throw new Error('Bad probe body');
    return result.ip;
  } finally {
    clearTimeout(timer);
  }
}

Имя хоста — это заполнитель. Сервер и клиент должны договориться о формате ответа и политике кэширования. Обрабатывайте отклонённые запросы и повреждённые ответы в вызывающем коде расширения, а не показывайте их как действительный выходной адрес.

Называйте наблюдение точно

Успешный результат доказывает, что этот запрос дошёл до конечной точки и получил ожидаемую форму ответа. Сравните наблюдаемый адрес с предполагаемым маршрутом там, где это сравнение осмысленно. IP, на котором слушает настроенный прокси, не обязан быть его публичным выходом.

Правило PAC или список обхода может отправить проверку напрямую, пока другой адресат использует прокси. Чтение настроек прокси даёт доказательства конфигурации; запрос даёт доказательства для этого адресата. Ни одно из них само по себе не доказывает, что каждая вкладка или URL идёт по тому же маршруту.

Держите в интерфейсе отдельно тайм-аут, ошибку HTTP и неожиданное тело. «Эта проверка не удалась» полезнее, чем объявлять всю машину офлайн после одного запроса.

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