HttpHeadersFilters
Spring Cloud Gateway에서 Backend로 요청을 보내기 전에 HTTP 헤더를 조작하거나 필터링하는 역할
NettyRoutingFilter와 같은 Routing 단계 이전에 실행된다
Forwarded Headers Filter
Gateway에서 Forwarded 헤더를 생성하여 Backend로 전달
Forwarded 헤더에 포함된 정보
- for: 요청을 보낸 클라이언트의 IP 주소
- Host: 원본 요청의 Host 값
- Scheme: HTTP/HTTPS와 같은 프로토콜
- Port: 요청이 수신된 포트
Forwarded: for=192.168.1.10;host=myapp.com;proto=https
RemoveHopByHop Headers Filter
**RFC 2616 (IETF 표준)**에 정의된 Hop-by-Hop 헤더들은 Gateway를 통과할 때 제거된다.
Hop-by-Hop Header란
이들은 하나의 네트워크 홉(Proxy, Gateway 등)에서만 유효한 헤더들이며, 다음 홉으로 전달되지 않아야 한다.
기본적으로 제거되는 헤더 목록
- Connection
- 현재 TCP 연결에 대한 상태 관리 정보를 포함
- keep-alive, close, 또는 특정 헤더 이름들이 올 수 있다
- Keep-Alive
- 지속 연결(Keep-Alive)에서 연결의 수명을 제어합니다.
- 초 단위 시간(timeout)이나 최대 요청 개수(max)를 설정
- Proxy-Authenticate
- Proxy-Authorization
- TE
- Trailer
- Transfer-Encoding
- Upgrade
Customize 설정 방법
spring:
cloud:
gateway:
filter:
remove-hop-by-hop:
headers:
- Connection
- Keep-Alive
XForwarded Headers Filter
Gateway는 요청이 프록시를 거쳐 왔다는 정보를 표시하기 위해 X-Forwarded-* 헤더들을 추가한다.
- X-Forwarded-For: 원본 Client IP 주소
- X-Forwarded-Host: 원본 요청의 Host 값
- X-Forwarded-Port: 원본 요청의 포트
- X-Forwarded-Proto: HTTP/HTTPS 프로토콜
- X-Forwarded-Prefix: Gateway를 경유하면서 추가된 경로
X-Forwarded-For: 203.0.113.195
X-Forwarded-Host: example.com
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Forwarded-Prefix: /api
해당 헤더들을 노출하는 설정은 기본값은 true
spring:
cloud:
gateway:
x-forwarded:
for-enabled: true # X-Forwarded-For
host-enabled: true # X-Forwarded-Host
port-enabled: true # X-Forwarded-Port
proto-enabled: true # X-Forwarded-Proto
prefix-enabled: true # X-Forwarded-Prefix
appending 옵션
X-Forwarded-* 헤더가 중복으로 생성될 때, 기존 값을 덧붙일지 덮어쓸지 설정할 수 있다.
기본값은 true로, 여러 프록시를 지나갈 때 헤더가 계속 Append
spring:
cloud:
gateway:
x-forwarded:
for-append: true
host-append: true
port-append: true
proto-append: true
prefix-append: false # 덧붙이지 않고 덮어씀