การตรวจสอบพร็อกซีในส่วนขยาย Chrome ต้องมีปลายทางที่ตอบสนองได้คาดเดาได้ ใช้ปลายทาง HTTPS ที่คุณควบคุม เช่นปลายทางที่ส่งคืนออบเจ็กต์ JSON ขนาดเล็กซึ่งมีที่อยู่ที่มันเห็น

เรียกใช้คำขอจากบริบทของส่วนขยาย เช่น service worker หรือหน้าส่วนขยาย โดยใส่ปลายทางไว้ใน host permissions ของ manifest:

"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 และเนื้อความที่ไม่คาดคิดออกจากกันในอินเทอร์เฟซ “การตรวจสอบนี้ล้มเหลว” มีประโยชน์กว่าการประกาศว่าเครื่องทั้งหมดออฟไลน์หลังคำขอเดียว

บทความที่เกี่ยวข้อง