ForwardedForwarded는 리버스 프록시가 원 클라이언트·프로토콜·호스트 정보를 표준화된 단일 헤더로 뒤쪽 서버에 전달하기 위한 헤더입니다(RFC 7239). 관행적으로 난립하던 `X-Forwarded-*` 계열을 하나로 통합한 표준입니다.
값은 `for`·`by`·`host`·`proto` 같은 이름-값 쌍을 세미콜론으로 묶고, 프록시 홉마다 쉼표로 이어 붙입니다(예: `for=192.0.2.60;proto=https;by=203.0.113.43`).
`X-Forwarded-For`·`X-Forwarded-Host`·`X-Forwarded-Proto`가 각각 별도 헤더로 흩어져 있던 것을, Forwarded는 하나의 헤더 안에 파라미터로 담아 여러 홉의 정보를 순서·짝을 유지하며 표현합니다. IPv6 주소나 포트가 포함될 때는 값을 따옴표로 감싸며(`for="[2001:db8::1]:8080"`), 프라이버시를 위해 `for=_hidden`·`for=unknown` 같은 불투명 식별자를 쓸 수도 있습니다.
표준임에도 현장 채택은 여전히 `X-Forwarded-*`가 우세합니다. 많은 로드밸런서·프레임워크·프록시가 기본적으로 구식 헤더를 쓰기 때문입니다. 신규 설계라면 Forwarded를 지향하되, 상·하류 구성요소가 이를 파싱하는지 확인해야 합니다.
보안상 이 값도 클라이언트·중간자가 위조할 수 있으므로 그대로 신뢰하면 안 됩니다. 신뢰 경계의 프록시가 들어오는 Forwarded를 검증·재작성하고, 애플리케이션은 '자신이 신뢰하는 프록시가 붙인 값'만 사용해야 합니다. 여러 홉이 있으면 신뢰 사슬을 따라 실제 클라이언트 항목을 결정합니다.
Forwarded: for=<client>[;by=<proxy>][;host=<host>][;proto=<scheme>][, ...]e.g. Forwarded: for=192.0.2.60;proto=https;by=203.0.113.43
for=<node> | 요청을 프록시에 전달한 클라이언트(또는 앞선 노드)의 식별자. IP 또는 불투명 토큰(`_hidden`), IPv6는 따옴표로 감쌈. |
by=<node> | 요청을 받은 프록시/인터페이스의 식별자. 내부 라우팅 추적용. |
host=<host> | 클라이언트가 원래 요청한 Host 헤더 값(프록시가 재작성하기 전). |
proto=<scheme> | 원 요청의 스킴(`http` 또는 `https`). |