터널은 HTTP를 통해 다른 프로토콜을 통신하는 방법이다

즉, 웹 터널을 사용하면 HTTP를 통해 HTTP가 아닌 트래픽을 전송할 수 있다.

8.5.1 CONNECT로 HTTP 터널 커넥션 맺기

CONNECT 요청

요청 URI는 호스트명이 대신 사용된다

CONNECT example.com:443 HTTP/1.0
User-Agent: Mozilla/4.0

CONNECT 응답

보통 '200 Connection Established' 상태코드를 사용하며, 일반적인 HTTP 응답과는 달리 Content-Type 헤더를 포함할 필요가 없다. (왜냐하면 메시지 전달이 아니라 터널링에 의해 바이트를 전달할 것이기 때문에 컨텐츠 타입은 의미없다)

HTTP/1.0 200 Connection Established
Server: My-Tunnel/1.0

이후 통신은 HTTP 프로토콜이 아닌 서로 협의된 프로토콜에 의해 통신이 이루어진다

8.5.3 SSL 터널링

웹 터널은 원래 방화벽을 통해서 암호화된 SSL 트래픽을 전달하려고 개발되었다.

443 포트를 지원하지 않는 환경에서 HTTP(80포트)를 통해 HTTPS의 raw 데이터를 실어나르고자 고안된 방법이다. (물론 최근에는 이런 환경은 없겠지만.. 과거에는 있었음)