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

Изпълнете заявката от контекста на разширението, например от service worker или страница на разширението, като крайната точка е в host permissions на манифеста:

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

Разрешението за хост не дава на скрипт за съдържание същите права за достъп между произходи. Дръжте проверката в контекста на разширението, вместо да предполагате, че инжектиран скрипт може да направи същата заявка.

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 грешката и неочакваното тяло отделни в интерфейса. „Тази проверка се провали“ е по-полезно от обявяване на цялата машина за офлайн след една заявка.

Подобни статии