Apigee Edge 문서입니다.
Go to the
Apigee X 문서로 이동합니다. info
증상
클라이언트 애플리케이션에 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 Public 및 Private Cloud 사용자 |
일반적인 진단 단계
다음 도구/기법 중 하나를 사용하여 이 오류를 진단합니다.
API 모니터링
API 모니터링을 사용하여 오류를 진단하려면 다음 단계를 따르세요.
- 적절한 역할을 가진 사용자로 Apigee Edge UI에 로그인합니다.
문제를 조사하려는 조직으로 전환합니다.

- 분석 > API 모니터링 > 조사 페이지로 이동합니다.
- 오류가 발생한 특정 기간을 선택합니다.
- 프록시 필터가 전체 로 설정되어 있는지 확인합니다.
- 오류 코드 를 시간 에 대해 표시합니다.
아래와 같이 오류 코드
protocol.http.DuplicateHeader가 있는 셀을 선택합니다.
오류 코드
protocol.http.DuplicateHeader에 대한 정보가 표시됩니다.
- 로그 보기 를 클릭하고 실패한 요청의 행을 펼칩니다.
- 로그 창에서 다음 세부정보를 확인합니다.
- 상태 코드:
400 - 오류 소스:
apigee - 오류 코드:
protocol.http.DuplicateHeader.
- 상태 코드:
- 오류 소스 의 값이
apigee또는MP이고 오류 코드 의 값이protocol.http.DuplicateHeader이면 클라이언트의 HTTP 요청에 중복 헤더가 포함되어 있음을 나타냅니다.
Trace 도구
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으로 인해 여전히 실패하는 요청이 있는지 검색합니다. X-Apigee-fault-code 가
protocol.http.DuplicateHeader의 값과 일치하는400오류를 발견한 경우 X-Apigee-fault-source 의 값을 확인합니다.NGINX 액세스 로그의 샘플 400 오류:
NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee- fault-code 및 X-Apigee-fault-source:에 다음 값이 있습니다.
응답 헤더 값 X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source MP
원인: 요청의 중복 헤더
진단
- 일반적인 진단 단계에 설명된 대로 API 모니터링 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드 와 오류 소스 를 확인합니다.
- 오류 소스 의 값이
apigee또는MP이면 클라이언트 애플리케이션에서 Apigee로 전송되는 요청에 중복 헤더가 포함되어 있음을 나타냅니다. 다음 방법 중 하나를 사용하여 요청의 일부로 두 번 이상 전송되는 실제 헤더를 확인할 수 있습니다.
오류 메시지
오류 메시지 사용
Apigee Edge에서 수신한 전체 오류 메시지에 액세스할 수 있는 경우
faultstring을 참조하세요.faultstring에는 두 번 이상 전송된 헤더 이름이 포함되어 있습니다.샘플 오류 메시지:
"faultstring":"Duplicate Header \"Expires\""
- 위 오류 메시지에서 헤더
Expires가faultstring에 표시된 대로 두 번 이상 전송되었음을 확인할 수 있습니다.
실제 요청
실제 요청 사용
클라이언트 애플리케이션에서 보낸 실제 요청에 액세스할 수 있는 경우 다음 단계를 따르세요.
- 요청에 전달된 헤더 목록을 확인합니다.
- 특정 헤더가 동일한 값 또는 다른 값을 사용하여 요청에 두 번 이상 표시되는 경우 이 오류의 원인입니다.
샘플 요청:
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 요청의 trace 파일
Private Cloud 사용자인 경우 다음 정보를 제공하세요.
- 실패한 요청에 대해 관찰된 전체 오류 메시지
- 환경 이름
- API 프록시 번들
400오류를 재현하는 데 사용한 전체curl명령어- API 요청의 trace 파일
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