Unha sonda de proxy nunha extensión de Chrome precisa un destino cunha resposta previsíbel. Usa un punto final HTTPS que controles, como un que devolva un obxecto JSON pequeno co enderezo que observa.

Executa a solicitude desde un contexto da extensión, como o seu service worker ou unha páxina da extensión, co punto final nos host permissions do manifesto:

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

O permiso de host non outorga a un content script os mesmos privilexios entre orixes. Mantén a sonda no contexto da extensión en vez de supoñer que un script inxectado pode facer a mesma solicitude.

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);
  }
}

O nome de host é un marcador de posición. O servidor e o cliente deben acordar o formato de resposta e a política de caché. Xestiona as solicitudes rexeitadas e as respostas mal formadas no chamador da extensión en vez de mostralas como un enderezo de saída válido.

Nomea a observación con precisión

Un resultado correcto demostra que esta solicitude chegou ao punto final e recibiu a forma de resposta esperada. Compara o enderezo observado coa ruta que pretendías, cando esa comparación ten sentido. O IP de escoita do proxy configurado non ten por que ser a súa saída pública.

Unha regra PAC ou unha lista de omisión pode enviar a sonda directamente mentres outro destino usa un proxy. Ler a configuración do proxy achega probas de configuración; a solicitude achega probas para este destino. Ningunha das dúas por si soa demostra que cada lapela ou URL siga a mesma ruta.

Mantén un tempo de espera, un erro HTTP e un corpo inesperado separados na interface. «Esta sonda fallou» é máis útil que declarar toda a máquina sen conexión tras unha soa solicitude.

Artigos relacionados