여러 종류 리소스에 접근하는데 HTTP가 어떻게 쓰이는 지 알아보자.
게이트웨이는 리소스를 받기 위한 경로를 안내하는 역할을 한다.
애플리케이션은 게이트웨이에게 요청을 처리해달라고 할 수 있고, 게이트웨이는 그에 응답이 가능하다.
게이트웨이는 HTTP 트래픽을 다른 프로토콜로 자동으로 변환하여, HTTP 클라이언트가 다른 프로토콜을 알 필요 없이 서버에 접속할 수 있게 한다.
FTP 게이트웨이
해당 게이트웨이는 FTP URL을 가리키는 HTTP 요청을 받는다.
이후 게이트웨이는 FTP 커넥션을 맺고 FTP 서버에 적절한 명령을 전송한다.
애플리케이션 서버 게이트웨이
해당 게이트웨이는 API를 통해서 HTTP 클라이언트를 서버 측 애플리케이션 프로그램에 연결한다.
웹에서 물건을 사거나, 일기예보를 볼 때 이러한 방식으로 이루어진다.
클라이언트 게이트웨이와 서버 게이트웨이
웹 게이트웨이는 한쪽에서 HTTP로 통신하고 다른 한 쪽에서는 HTTP가 아닌 다른 프로토콜로 통신한다.
프락시에 트래픽을 바로 보내는 것과 같이 게이트웨이에도 HTTP 트래픽을 바로 보낼 수 있다.
보통, 브라우저에 명시적으로 게이트웨이를 설정하여 자연스럽게 트래픽이 게이트웨이를 거쳐가게 할 수 있다.
HTTP/HTTPS: 서버 측 보안 게이트웨이
기업 내부의 모든 웹 요청을 암호화함으로써 개인 정보 보호와 보안을 제공하는데 게이트웨이를 사용할 수 있다.
클라이언트는 평소와 같인 일반 HTTP를 사용하여 웹을 탐색하지만, 게이트웨이가 자동으로 사용자의 모든 세션을 암호화하여 보호한다.
클라이언트 -> HTTP 요청 -> [HTTP/HTTPS 보안 게이트웨이] -> HTTPS 요청 -> 서버
HTTPS/HTTP: 클라이언트 측 보안 가속 게이트웨이
해당 게이트웨어는 보안 가속기로 유명하다.
이 HTTPS/HTTP 게이트웨이는 웹 서버 앞단에 위치하고, 보이지 않는 인터셉트 게이으퉤이나 리버스 프락시 역할을 한다.
이 게이트웨이는 HTTPS 트래픽ㄹ을 받아 복호화하여 웹 서버에게 일반 HTTP 요청을 보낸다.
클라이언트 -> HTTPS 요청 -> [HTTPS/HTTP 보안 가속 게이트웨이] -> HTTP 요청 -> 서버
앞에서 살펴본 게이트웨이는 클라이언트와 서버를 연결하는 게이트웨이였다.
하지만 가장 일반적인 형태의 게이트웨이는 애플리케이션 서버로 서버와 게이트웨이를 한 개의 서버로 결합한다.
애플리케이션 서버는 HTTP를 통해서 클라이언트와 통신하고 서버 측에 있는 애플리케이션 프로그램에 연결하는 게이트웨이이다.
전자상거래 API
클라이언트 -> HTTP 요청 -> 애플리케이션 서버 -> API 호출 -> 애플리케이션 프로그램 실행 -> HTTP 응답 메세지 -> 클라이언트
최초의 API
애플리케이션 게이트웨이에서 유명했던 최초의 API는 공용 게이트웨이 인터페이스(CGI)이다.
CGI는 특정 URL에 대한 HTTP 요청에 따라 프로그램을 실행하고, 프로그램 출력을 수집하고, HTTP 응답으로 회신하는데 사용되는 표준화된 인터페이스 집합이다.
현재까지도 널리 쓰이고 있는 단순한 접근 방식이다.
웹 터널은 HTTP의 또 다른 사용 방법이다.
웹 터널은 HTTP 프로토콜을 지원하지 않는 애플리케이션에 HTTP 애플리케이션을 사용해 접근하는 방법을 제공한다.
웹 터널을 사용하면 HTTP 커넥션을 통해 HTTP 아닌 다른 트래픽을 전송할 수 있고, 다른 프로토콜을 HTTP위에 올릴 수 있다.
CONNECT로 HTTP 터널 커넥션 맺기
웹 터널은 HTTP의 CONNECT 메서드를 통해 커넥션을 맺는다.
CONNECT 메서드는 터널 게이트웨이가 임의의 목적 서버와 포트에 TCP 커넥션을 맺고 클라이언트와 서버 간에 오는 데이터를 무조건 전달하기를 요청한다.
데이터 터널링, 시간, 커넥션 관리
터널을 통해 전달되는 데이터는 게이트웨이에서 볼 수 없어서, 게이트웨이는 패킷의 순서나 흐름에 대한 어떤 가정도 할 수 없다.
터널이 일단 연결되면 데이터는 어디로든 흘러갈 수 있다.
SSL 터널링
웹 터널은 원래 방화벽을 통해서 암호화된 SSL 트래픽을 전달하려고 개발되었다.
많은 회사가 더 강력한 보안을 위해 모든 트래픽이 라우터와 프락시를 지나도록 했다.
그러나 낡은 방식의 프락시에서 SSL와 같은 암호화 프로토콜이 처리되지 않아 HTTP에 터널링 기능이 추가되었다.
하지만 터널은 악의적인 트래픽도 유입될 위험성이 있어 주의해야 한다.
터널 인증
HTTP의 다른 기능들은 터널과 함께 사용할 수 있다.
특히 프락시 인증 기능은 클라이언트가 터널을 사용할 수 있는 권한을 검사하는 용도로 널리 사용된다.
HTTP 릴레이는 HTTP 명세를 완전히 준수하지 않는 간단한 HTTP 프락시다.
릴레이는 커넥션을 맺기 위한 HTTP 통신을 한 다음, 바이트를 맹목적으로 전송한다.
HTTP는 복잡하기에, 모든 헤더와 메서드 로직을 무시하고 맹목적으로 데이터만 전달하는 방식이 유용할 때가 있다.
하지만 이는 잠재적으로 심각한 상호 운용 문제를 발생시킬 수 있기때문에 주의해야 한다.
ex. 맹목적 릴레이 (무한 keep-alive 요청 기다림)