1. 개요
X-Forwarded-Proto는 클라이언트가 로드 밸런서 또는 프록시에 연결할 때 사용한 원래 프로토콜(HTTP 또는 HTTPS)을 애플리케이션 서버에 전달하기 위한 요청 헤더다.
예를 들어 클라이언트는 HTTPS로 로드 밸런서에 접속했지만, 로드 밸런서와 백엔드 서버 사이의 통신은 HTTP로 이루어질 수 있다. 이 경우 서버 입장에서는 직접 받은 요청이 HTTP처럼 보이므로, 원래 클라이언트가 어떤 프로토콜로 접속했는지 별도로 확인할 방법이 필요하다.
2. 사용 이유
이 헤더는 클라이언트가 로드 밸런서 연결에 사용한 프로토콜(HTTP 또는 HTTPS)을 식별하는 데 도움을 준다.
서버 액세스 로그에는 일반적으로 서버와 로드 밸런서 간에 사용된 프로토콜만 포함되며, 클라이언트와 로드 밸런서 간에 사용된 프로토콜에 대한 정보는 포함되지 않을 수 있다.
따라서 클라이언트와 로드 밸런서 간에 사용된 프로토콜을 확인하려면 X-Forwarded-Proto 요청 헤더를 참고해야 한다.
3. 활용 예시
- HTTPS로 접속한 사용자에게 올바른 절대 URL을 생성해야 할 때
- HTTP 요청을 HTTPS로 리다이렉트해야 하는지 판단할 때
- 보안 쿠키 설정이나 보안 관련 로직에서 원래 요청 프로토콜을 확인해야 할 때
- 로그 분석 시 실제 클라이언트 접속 프로토콜을 구분해야 할 때
다만 X-Forwarded-Proto는 요청 헤더이므로 클라이언트가 임의로 보낼 수도 있다. 애플리케이션에서는 신뢰할 수 있는 로드 밸런서나 프록시를 통해 들어온 요청에 대해서만 이 값을 신뢰하도록 설정하는 것이 좋다.