Firefox 확장 API는 개별 요청에 대해 프록시 결정을 내릴 수 있습니다. 요청에 유효한 탭 귀속이 있으면 확장 기능은 해당 탭 ID를 사용자가 선택한 탭과 비교할 수 있습니다.

기존 Firefox 확장의 백그라운드 스크립트에서는 라우팅 부분을 다음과 같이 작성할 수 있습니다.

browser.proxy.onRequest.addListener(details => {
  if (details.tabId === selectedTabId) {
    return {type: 'http', host: 'proxy.example', port: 8080};
  }
  return {type: 'direct'};
}, {urls: ['<all_urls>']});

확장 기능은 자체 사용자 선택 로직에서 selectedTabId를 제공합니다. HTTP 호스트와 정수 포트는 허용된 공개 탭 테스트를 위해 HTTP 프록시 목록에서 가져올 수 있습니다. 프록시 권한과 필터링된 URL을 포괄하는 호스트 권한이 필요합니다.

이는 PAC 스크립트와 다릅니다. PAC의 표준 URL 및 호스트 판단은 브라우저 탭을 식별하지 않습니다. 다른 탭이 로드되는 동안 Firefox의 전역 수동 프록시를 바꾸는 것과도 다릅니다.

브라우저의 기반 구성을 고려하세요. ProxyInfo의 direct 값은 사용자가 설정한 프록시를 덮어쓰지 않습니다. 일치하지 않는 모든 요청이 직접 나간다고 약속하기보다 기본 정책과 대체 동작을 확인하세요.

일부 트래픽에는 신뢰할 수 있는 탭 정보가 없으며, Mozilla는 HTTP/3 프록시 연결에 대해 부정확한 귀속을 문서화합니다. 이는 요청 라우팅을 보여 줄 뿐, 탐색 작업과 관련된 모든 연결이 탭별로 격리된다는 보장은 아닙니다. 확장 기능별 컨테이너 라우팅은 평가해 볼 또 다른 모델입니다.

관련 글