Перевірці проксі в розширенні 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 і неочікуване тіло. «Ця перевірка не вдалася» корисніше, ніж оголошувати всю машину офлайн після одного запиту.

Схожі статті