설명
HTTP 프록시는 가장 흔한 유형의 프록시 서버입니다. 애플리케이션 계층에서 HTTP를 이해합니다. 클라이언트가 요청을 보낼 때, 프록시는 목적지로 요청을 전달하기 전에 URL, 헤더, 그리고 (일반 HTTP의 경우) 본문을 읽을 수 있습니다. HTTPS의 경우 프록시는 CONNECT 메서드를 사용해 목적지까지 TCP 터널을 구축하며, 이후에는 내용을 보지 않고 암호화된 바이트만 전달합니다.
레지덴셜, ISP, 데이터센터 제공업체를 포함한 대부분의 상업용 프록시 서비스는 HTTP 프록시 엔드포인트를 제공합니다. 모든 HTTP 클라이언트와 라이브러리가 이를 기본적으로 지원하기 때문입니다. `HTTP_PROXY`와 `HTTPS_PROXY` 환경 변수를 설정하거나, Python의 `requests`에 `proxies={...}`를 전달하거나, Playwright에서 실행 플래그를 설정하는 것 모두 `http://user:pass@gate.shifter.io:10000`과 같은 HTTP 프록시 URL로 별도 설정 없이 바로 작동합니다.
HTTP와 SOCKS5의 차이는 대체로 구조적인 것입니다. HTTP 프록시는 애플리케이션 계층에서 작동합니다(HTTP를 파싱할 수 있음). SOCKS5는 전송 계층에서 작동합니다(단순히 TCP/UDP 바이트를 전달함). HTTPS 스크래핑의 경우 그 차이는 대체로 표면적인 것입니다. 두 방식 모두 결국 암호화된 바이트를 터널링하게 되며, HTTP 프록시 지원이 도구 전반에서 더 보편적입니다.
작동 방식
일반 HTTP의 경우, 클라이언트는 전체 요청을 프록시로 보내고(절대 URL을 포함한 `GET http://example.com/path HTTP/1.1`), 프록시는 URL을 읽어 대상에 연결을 열고, 요청을 전달한 뒤 응답을 다시 전달합니다. HTTPS의 경우, 클라이언트는 먼저 프록시에 `CONNECT example.com:443` 요청을 보내고, 프록시는 대상까지 TCP 터널을 열며, 이후부터 클라이언트와 서버는 프록시를 통해 종단 간으로 TLS를 사용하고, 프록시는 단지 암호화된 바이트를 전달할 뿐입니다.
인증은 보통 `Proxy-Authorization` 헤더(username:password를 사용한 Basic 인증)를 통해 이루어지거나, 프록시 URL에 자격 증명을 인코딩하는 방식(`http://user:pass@host:port`)으로 이루어집니다. 상용 서비스의 지리적 타겟팅 및 세션 매개변수는 일반적으로 사용자 이름에 인코딩됩니다(`customer-USER-country-us-session-12345`).