2016-10-05 5 views
4

두 개의 EC2 인스턴스에서 실행되는 REST API 애플리케이션을 가지고 있고 오랫동안 AWS 클래식로드 밸런서를 사용하고있었습니다. REST API의 클라이언트는 응답 헤더 (예 : Location)에 의존합니다.AWS 애플리케이션로드 밸런서가 모든 헤더를 소문자로 변환합니다.

HTTP 헤더가 정의에 따라 대소 문자를 구별한다는 것을 알고 있지만 일부 클라이언트는이를 무시하고 대소 문자를 구분하여 헤더를 확인합니다 (예 : Location은 대문자로 시작해야 함).

최근 AWS Application Load Balancer로 변경 했으므로 클라이언트가 모든 응답 헤더를 소문자로 변환하므로 클라이언트가 응답을 제대로 처리하지 못하는 것으로 나타납니다.

여기 몇 가지 질문이 있습니다.

  1. Application Load Balancer의 예상되는 동작입니까?
  2. 응용 프로그램에서 작성한 헤더를 반환하도록 구성 할 수 있습니까?

답변

6

HTTP/2 lowercases all headers 및 ALBs support HTTP/2이기 때문에 예상되는 기능입니다. 안타깝게도 ALB가 헤더를 조작하는 방법을 수정할 수는 없습니다.

업데이트 : 아래의 설명을 참조하십시오. ALB가 HTTP/2에 대한 지원으로 인해 요청 헤더를 소문자로 작성했다는 나의 진술은 정확하지 않을 수 있습니다.

+2

테스트 결과이 대답이 부분적으로 정확하지 않거나 불완전하다는 것을 나타냅니다. 요청이 HTTP/2 모드에서 처리 될 때 ALB는 실제로 헤더를 소문자로 강제 변환합니다 -하지만 클라이언트가 HTTP/2를 지원하지 않으면이 강제 **가 나타나지 않습니다 일어날 일은 ... * 단지 HTTP/2를 지원하기 때문에 클라이언트는 * HTTP/2를 사용하기 때문에 단지 * 발생하지 않습니다. 클라이언트가 소문자 헤더를보고 있으면 클라이언트가 반드시 ALB에 HTTP/2를 말하고 있어야하는 경우가 나타납니다 ... 이는 소문자가 실패 할 경우 클라이언트가 손상되었음을 의미합니다. –

+1

REST 클라이언트가 HTTP/1이면 vtor의 대소 문자를 구별하는 클라이언트가 예상대로 작동 할 것인가? – jbird

+1

나머지 클라이언트 중 하나가 HTTP/2이고 헤더 해석이 손상되었거나 문제의 본질이 잘못 확인되었음을 나타냅니다. –

관련 문제