두 개의 EC2 인스턴스에서 실행되는 REST API 애플리케이션을 가지고 있고 오랫동안 AWS 클래식로드 밸런서를 사용하고있었습니다. REST API의 클라이언트는 응답 헤더 (예 : Location
)에 의존합니다.AWS 애플리케이션로드 밸런서가 모든 헤더를 소문자로 변환합니다.
HTTP 헤더가 정의에 따라 대소 문자를 구별한다는 것을 알고 있지만 일부 클라이언트는이를 무시하고 대소 문자를 구분하여 헤더를 확인합니다 (예 : Location
은 대문자로 시작해야 함).
최근 AWS Application Load Balancer로 변경 했으므로 클라이언트가 모든 응답 헤더를 소문자로 변환하므로 클라이언트가 응답을 제대로 처리하지 못하는 것으로 나타납니다.
여기 몇 가지 질문이 있습니다.
- Application Load Balancer의 예상되는 동작입니까?
- 응용 프로그램에서 작성한 헤더를 반환하도록 구성 할 수 있습니까?
테스트 결과이 대답이 부분적으로 정확하지 않거나 불완전하다는 것을 나타냅니다. 요청이 HTTP/2 모드에서 처리 될 때 ALB는 실제로 헤더를 소문자로 강제 변환합니다 -하지만 클라이언트가 HTTP/2를 지원하지 않으면이 강제 **가 나타나지 않습니다 일어날 일은 ... * 단지 HTTP/2를 지원하기 때문에 클라이언트는 * HTTP/2를 사용하기 때문에 단지 * 발생하지 않습니다. 클라이언트가 소문자 헤더를보고 있으면 클라이언트가 반드시 ALB에 HTTP/2를 말하고 있어야하는 경우가 나타납니다 ... 이는 소문자가 실패 할 경우 클라이언트가 손상되었음을 의미합니다. –
REST 클라이언트가 HTTP/1이면 vtor의 대소 문자를 구별하는 클라이언트가 예상대로 작동 할 것인가? – jbird
나머지 클라이언트 중 하나가 HTTP/2이고 헤더 해석이 손상되었거나 문제의 본질이 잘못 확인되었음을 나타냅니다. –