HTTP CONNECT
더 많은 작업
HTTP CONNECT는 클라이언트가 HTTP 프록시 서버에 목적지 호스트와 포트로 가는 터널을 열어 달라고 요청하는 HTTP 메서드로, 터널이 열리면 프록시는 양방향 데이터를 해석하지 않고 그대로 중계한다.
HTTP 의미 체계를 정한 RFC 9110 은 CONNECT 를 "요청 대상이 가리키는 목적지 서버로 터널을 세우고, 성공하면 터널이 닫힐 때까지 양방향 데이터를 무조건 전달(blind forwarding)하는 것만 하도록 요청하는 메서드"로 정의한다. 터널은 하나 이상의 프록시를 거치는 종단 간 가상 연결을 만들고, 그 연결은 TLS 로 보호할 수 있다.[1] CONNECT 는 프록시에 보내는 용도이고, 대부분의 원 서버는 이 메서드를 구현하지 않는다.[1]
요청 대상은 다른 메서드처럼 경로가 아니라 호스트:포트 형식만 쓰며, 기본 포트가 없으므로 포트를 반드시 적는다.
CONNECT www.example.com:443 HTTP/1.1 Host: www.example.com:443 HTTP/1.1 200 Connection Established
프록시가 2xx 로 응답하면 그 직후부터 연결은 터널 모드로 바뀌고, 이후 오가는 바이트는 목적지 서버와 주고받는 것이다.[1]
브라우저가 HTTP 프록시를 쓰도록 설정되어 있을 때 HTTPS 사이트에 접속하는 과정은 다음과 같다.[2]
- 브라우저가 프록시에 TCP 연결을 맺고
CONNECT 목적지:443요청을 보낸다. GET·POST 같은 일반 메서드로 HTTPS 요청을 그대로 넘기지 않는다 - 프록시가 목적지 서버에 TCP 연결을 맺고 200 응답을 돌려준다
- 브라우저와 목적지 웹 서버 사이에서 TLS 핸드셰이크가 한 번 일어난다. 프록시는 그 바이트를 TCP 수준에서 중계할 뿐 내용을 해독하지 못한다
- 이후의 HTTP 요청·응답은 모두 이 TLS 안에서 암호화되어 오간다
따라서 "브라우저-프록시 구간과 프록시-웹 서버 구간에서 각각 따로 TLS 핸드셰이크를 한다"는 설명은 CONNECT 터널이 아니라, 프록시가 중간에서 TLS 를 끊고 다시 맺는 TLS 가로채기 프록시(SSL 복호화 장비)의 동작이다. 이 경우 프록시가 자기 인증서로 서버를 흉내 내므로 클라이언트에 프록시의 루트 인증서를 미리 설치해야 한다.
- CONNECT 터널은 HTTPS 뿐 아니라 SSH·FTP 처럼 막혀 있을 트래픽도 HTTP 프록시를 통해 내보낼 수 있다. 그래서 프록시는 CONNECT 를 허용하는 목적지 포트(보통 443)를 제한해야 한다.[2]
- 프록시는 터널 안의 내용을 볼 수 없으므로 URL 단위 필터링·악성코드 검사를 하려면 TLS 가로채기를 따로 구성해야 한다.
- ↑ 1.0 1.1 1.2 「RFC 9110: HTTP Semantics」 9.3.6 CONNECT, IETF, 2022, https://www.rfc-editor.org/rfc/rfc9110, 확인일: 2026-11-05.
- ↑ 2.0 2.1 「CONNECT request method」, MDN Web Docs, Mozilla, https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods/CONNECT, 확인일: 2026-11-05.