Uma sonda de proxy numa extensão do Chrome precisa de um destino com resposta previsível. Use um endpoint HTTPS que controle, como um que devolva um pequeno objeto JSON com o endereço que observa.

Execute a solicitação a partir de um contexto da extensão, como o service worker ou uma página da extensão, com o endpoint nas host permissions do manifesto:

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

Uma permissão de host não concede a um content script os mesmos privilégios entre origens. Mantenha a sonda no contexto da extensão em vez de presumir que um script injetado pode fazer a mesma solicitação.

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 do host é um marcador de posição. O servidor e o cliente devem concordar sobre o formato da resposta e a política de cache. Trate as solicitações rejeitadas e as respostas malformadas no chamador da extensão em vez de exibi-las como um endereço de saída válido.

Nomeie a observação com precisão

Um resultado bem-sucedido estabelece que esta solicitação chegou ao endpoint e recebeu a forma de resposta esperada. Compare o endereço observado com a rota pretendida, onde essa comparação faz sentido. O IP de escuta do proxy configurado não precisa ser a sua saída pública.

Uma regra PAC ou uma lista de exceções pode enviar a sonda diretamente enquanto outro destino usa um proxy. Ler as configurações do proxy fornece evidência de configuração; a solicitação fornece evidência para este destino. Nenhuma das duas sozinha prova que cada aba ou URL siga a mesma rota.

Mantenha o tempo limite, o erro HTTP e um corpo inesperado separados na interface. «Esta sonda falhou» é mais útil do que declarar a máquina inteira offline após uma única solicitação.

Artigos relacionados