현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동 정보
증상
클라이언트 애플리케이션은 API 호출에 대한 응답으로 오류 코드 protocol.http.DuplicateHeader
와 함께 HTTP 상태 코드 400 Bad Request
를 가져옵니다.
오류 메시지
클라이언트 애플리케이션은 다음 응답 코드를 가져옵니다.
HTTP/1.1 400 Bad Request
또한 아래와 유사한 오류 메시지가 표시될 수 있습니다.
{ "fault":{ "faultstring":"Duplicate Header \"Expires\"", "detail":{ "errorcode":"protocol.http.DuplicateHeader" } } }
가능한 원인
이 오류는 Apigee Edge에서 중복을 허용하지 않는 특정 HTTP 헤더가 클라이언트에서 Apigee Edge로 전송하는 HTTP 요청의 일부로 동일하거나 다른 값으로 두 번 이상 표시되는 경우에 발생합니다.
RFC 7230, 섹션 3.2.2: 필드 순서에 따라 발신자는 헤더 필드의 전체 필드 값이 쉼표로 구분된 목록(예: #(values)] 또는 헤더 필드는 잘 알려진 예외입니다. Apigee Edge가 클라이언트에서 보낸 HTTP 요청 에서 중복이 허용되지 않는 특정 헤더를 찾으면 400 Bad Request
및 오류 코드 protocol.http.DuplicateHeader
로 응답합니다.
이 오류가 발생할 수 있는 원인은 다음과 같습니다.
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
요청에 중복된 헤더 | 클라이언트 애플리케이션에서 Apigee로 보내는 HTTP 요청에 중복 헤더가 포함되어 있습니다. | Edge 퍼블릭 및 프라이빗 클라우드 사용자 |
일반적인 진단 단계
다음 도구/기술 중 하나를 사용하여 이 오류를 진단하세요.
API 모니터링
API 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- 적절한 역할이 있는 사용자로 Apigee Edge UI에 로그인합니다.
문제를 조사하려는 조직으로 전환합니다.
- 분석 > API 모니터링 > 조사 페이지로 이동합니다.
- 오류를 관찰한 특정 기간을 선택합니다.
- 프록시 필터가 모두로 설정되어 있는지 확인합니다.
- 시간을 기준으로 결함 코드를 표시합니다.
아래와 같이 오류 코드가
protocol.http.DuplicateHeader
인 셀을 선택합니다.오류 코드
protocol.http.DuplicateHeader
에 관한 정보가 아래와 같이 표시됩니다.- 로그 보기를 클릭하고 실패한 요청이 있는 행을 펼칩니다.
- 로그 창에서 다음 세부정보를 확인합니다.
- 상태 코드:
400
- 결함 소스:
apigee
- 오류 코드:
protocol.http.DuplicateHeader
.
- 상태 코드:
- 오류 소스의 값이
apigee
또는MP
이고 오류 코드의 값이protocol.http.DuplicateHeader
이면 클라이언트의 HTTP 요청에 중복 헤더가 포함되어 있음을 나타냅니다.
추적 도구
NGINX
NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- Private Cloud 사용자는 NGINX 액세스 로그를 사용하여 HTTP
400
오류에 대한 주요 정보를 확인할 수 있습니다. NGINX 액세스 로그를 확인합니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
여기서 ORG, ENV, PORT#는 실제 값으로 대체됩니다.
- 특정 기간 동안
400
오류가 있는지 (과거에 문제가 발생한 경우) 또는 여전히400
와 함께 실패하는 요청이 있는지 검색합니다. protocol.http.DuplicateHeader
값과 일치하는 X-Apigee-fault-code가 포함된400
오류가 있는 경우 X-Apigee-fault-source의 값을 확인합니다.NGINX 액세스 로그의 샘플 400 오류:
NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee-fault-code 및 X-Apigee-fault-source에 대한 값이 다음과 같습니다.
응답 헤더 값 X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source MP
원인: 요청에 중복된 헤더가 있음
진단
- 일반적인 진단 단계에 설명된 대로 API 모니터링 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드 및 오류 소스를 확인합니다.
- 오류 소스의 값이
apigee
또는MP
이면 클라이언트 애플리케이션이 Apigee로 보낸 요청에 중복 헤더가 포함되어 있음을 나타냅니다. 다음 메서드 중 하나를 사용하여 요청의 일부로 2회 이상 전송되는 실제 헤더를 확인할 수 있습니다.
오류 메시지
오류 메시지 사용하기
Apigee Edge에서 받은 전체 오류 메시지에 액세스할 수 있는 경우
faultstring
를 참조하세요.faultstring
에는 두 번 이상 전송된 헤더 이름이 포함되어 있습니다.오류 메시지 샘플:
"faultstring":"Duplicate Header \"Expires\""
- 위의 오류 메시지에서
faultstring
에 표시된 대로Expires
헤더가 두 번 이상 전송된 것을 볼 수 있습니다.
실제 요청
실제 요청 사용하기
클라이언트 애플리케이션에서 보낸 실제 요청에 액세스할 수 있는 경우 다음 단계를 수행합니다.
- 요청에 전달된 헤더 목록을 확인합니다.
- 특정 헤더가 동일한 값 또는 다른 값으로 요청에 두 번 이상 표시되는 경우 , 이로 인해 이 오류가 발생합니다.
샘플 요청:
curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
위의 요청에서
Expires
헤더는 두 번 이상 전송됩니다. 따라서 이 요청은400 Bad Request
오류와 오류 코드protocol.http.DuplicateHeader
와 함께 실패합니다.- 또는 클라이언트 로그에 액세스할 수 있는 경우 Apigee Edge에 대한 실제 요청에 대한 정보가 있는지 확인하고 두 번 이상 전송된 헤더를 확인할 수 있습니다.
해상도
중복 수정
옵션 #1 [권장 옵션] 중복 헤더를 포함하지 않도록 클라이언트 애플리케이션 수정
- 특정 클라이언트가 중복 헤더를 전송하는 이유를 분석합니다. 예를 들어, 위의 경우에는
Expires
입니다. API 프록시가 중복 헤더를 허용해도 되는지 확인합니다. 일반적으로 HTTP 사양 RFC7230에 따라 권장되지 않습니다. - 바람직하지 않은 경우 중복 헤더를 전송하지 않도록 클라이언트 애플리케이션을 수정합니다.
위에 설명된 예에서 헤더
Expires
가 동일한 값으로 두 번 전송된다는 것을 알 수 있는데, 이는 바람직하지 않습니다. 이 문제는 아래와 같이Expires
헤더를 한 번만 전달하여 해결할 수 있습니다.curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- 중복 헤더를 허용하려면 옵션 #2 CwC 속성 사용으로 이동합니다.
CwC
옵션 #2 CwC 속성 사용
Apigee는 클라이언트 애플리케이션과 대상 서버가 Apigee Edge의 API 프록시에 중복 헤더를 전송할 수 있게 해주는
CwC 속성 HTTPHeader.<HeaderName>
를 제공합니다.
CwC 속성 | 값 |
---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
예를 들어 메시지 프로세서에서 다음 속성을 설정하여 헤더 Expires
에 대한 중복 값과 여러 값을 허용할 수 있습니다.
HTTPHeader.Expires=allowDuplicates, multiValued
- Private Cloud 사용자의 경우
중복 헤더를 사용하도록 메시지 프로세서 구성 안내 가이드를 사용하여 요청에 중복 헤더가 포함되어 있더라도 Apigee Edge에서
400 Bad Request
오류가 발생하지 않도록 속성을 구성할 수 있습니다. - Public Cloud 사용자인 경우 Apigee Edge 지원팀에 문의하여 조직에 이 속성을 구성하세요.
사양
Apigee는 클라이언트 애플리케이션이 다음 RFC 사양에 따라 요청의 일부로 중복 헤더를 전송하지 않을 것으로 예상합니다.
사양 |
---|
RFC 7230, 섹션 3.2.2: 필드 순서 |
RFC 7230, 섹션 3.2 헤더 필드 |
Apigee 지원의 지원이 더 필요하면 진단 정보를 수집해야 하는 경우로 이동하세요.
진단 정보 수집 필요
다음 진단 정보를 수집한 다음 Apigee Edge 지원팀에 문의하세요.
Public Cloud 사용자인 경우 다음 정보를 제공합니다.
- 조직 이름
- 환경 이름
- API 프록시 이름
400
오류를 재현하는 데 사용된 전체curl
명령어- API 요청에 대한 추적 파일
Private Cloud 사용자인 경우 다음 정보를 제공하세요.
- 실패한 요청에 대해 발견된 전체 오류 메시지
- 환경 이름
- API 프록시 번들
400
오류를 재현하는 데 사용한curl
명령어를 완료하세요.- API 요청에 대한 추적 파일
NGINX 액세스 로그:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
여기서 ORG, ENV, PORT#는 실제 값으로 대체됩니다.
- 메시지 프로세서 시스템 로그
/opt/apigee/var/log/edge-message-processor/logs/system.log