Một phép kiểm tra proxy trong tiện ích Chrome cần một đích đến có phản hồi dự đoán được. Hãy dùng một điểm cuối HTTPS do bạn kiểm soát, chẳng hạn điểm cuối trả về một đối tượng JSON nhỏ chứa địa chỉ mà nó quan sát.

Chạy yêu cầu từ ngữ cảnh của tiện ích, như service worker hoặc trang tiện ích, với điểm cuối nằm trong host permissions của manifest:

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

Quyền truy cập máy chủ không cấp cho content script cùng đặc quyền giữa các nguồn gốc. Hãy giữ phép kiểm tra trong ngữ cảnh tiện ích thay vì cho rằng script được chèn có thể gửi cùng yêu cầu đó.

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

Tên máy chủ là một chỗ giữ chỗ. Máy chủ và máy khách phải thống nhất định dạng phản hồi và chính sách bộ nhớ đệm. Hãy xử lý các yêu cầu bị từ chối và phản hồi hỏng trong phần gọi của tiện ích thay vì hiển thị chúng như một địa chỉ thoát hợp lệ.

Gọi tên quan sát cho chính xác

Kết quả thành công chứng minh rằng yêu cầu này đã đến điểm cuối và nhận được dạng phản hồi mong đợi. Hãy so sánh địa chỉ quan sát được với tuyến đường bạn dự định, ở nơi phép so sánh đó có ý nghĩa. IP mà proxy đã cấu hình lắng nghe không nhất thiết là lối ra công cộng của nó.

Một quy tắc PAC hoặc danh sách bỏ qua có thể gửi phép kiểm tra trực tiếp trong khi một đích khác dùng proxy. Đọc cài đặt proxy cung cấp bằng chứng về cấu hình; yêu cầu cung cấp bằng chứng cho đích này. Không cái nào một mình chứng minh rằng mọi tab hay URL đều đi theo cùng tuyến đường.

Hãy tách biệt thời gian chờ, lỗi HTTP và phần thân bất ngờ trong giao diện. «Phép kiểm tra này thất bại» hữu ích hơn việc tuyên bố cả máy ngoại tuyến sau một yêu cầu.

Bài viết liên quan