현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동 정보
증상
클라이언트 애플리케이션은 HTTP 상태 코드 502 Bad Gateway
와 함께 오류 코드 protocol.http.ResponseWithBody
를 API 호출에 대한 응답으로 가져옵니다.
오류 메시지
클라이언트 애플리케이션은 다음 응답 코드를 가져옵니다.
HTTP/1.1 502 Bad Gateway
또한 다음 오류 메시지 중 하나가 표시될 수도 있습니다.
{ "fault":{ "faultstring":"Received 204 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
{ "fault":{ "faultstring":"Received 205 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
가능한 원인
이 오류는 백엔드 서버에서 Apigee Edge로의 HTTP 응답이 204 No Content
또는 205 Reset Content
이지만 응답 본문 또는 다음 헤더 중 하나 이상을 포함하는 경우에 발생합니다.
Content-Length
Content-Encoding
Transfer-Encoding
RFC 7231, 섹션 6.3.5: 204 콘텐츠 없음 및
RFC 7231, 섹션 6.3.6: 205 콘텐츠 재설정 사양에 따라 추가 콘텐츠를 원본 서버에서 상태 코드 204 No
Content
또는 205 Reset Content
와 함께 응답 페이로드 본문의 일부로 전송하면 안 됩니다. 응답 헤더(예: Content-Length
, Content-Encoding
, Transfer-Encoding
)는 응답 페이로드의 크기, 유형 또는 형식을 나타냅니다.
따라서 다음과 같은 경우 Apigee Edge는 오류 코드가 protocol.http.ResponseWithBody
인 502 Bad Gateway
상태 코드를 클라이언트에 반환합니다.
백엔드 서버의 상태 코드 | ||
---|---|---|
백엔드 서버의 응답에 다음이 포함됨 | 204 콘텐츠 없음 | 205 콘텐츠 재설정 |
응답 본문 | 오류 | 오류 |
(0이 아닌 값으로 설정) |
오류 | 오류 |
( Apigee Edge에서 지원되는 인코딩으로 설정) |
오류 | 오류 없음 |
Transfer-Encoding |
오류 | 오류 |
이 오류가 발생할 수 있는 원인은 다음과 같습니다.
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
백엔드 서버의 응답 본문 또는 헤더 204 응답 | 백엔드 서버는 응답 본문 또는 하나 이상의 헤더 Content-Type , Content-Encoding 또는 Transfer-Encoding 와 함께 204 No Content 또는 205 Reset Content 응답을 보냅니다. |
Edge 퍼블릭 및 프라이빗 클라우드 사용자 |
일반적인 진단 단계
다음 도구/기술 중 하나를 사용하여 이 오류를 진단하세요.
API 모니터링
API 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- 적절한 역할이 있는 사용자로 Apigee Edge UI에 로그인합니다.
문제를 조사하려는 조직으로 전환합니다.
- 분석 > API 모니터링 > 조사 페이지로 이동합니다.
- 오류를 관찰한 특정 기간을 선택합니다.
- 시간을 기준으로 결함 코드를 표시합니다.
아래와 같이 오류 코드가
protocol.http.ResponseWithBody
인 셀을 선택합니다.( 더 큰 이미지 보기)
아래와 같이 오류 코드
protocol.http.ResponseWithBody
에 관한 정보가 표시됩니다.( 더 큰 이미지 보기)
로그 보기를 클릭하고 실패한 요청이 있는 행을 펼칩니다.
( 더 큰 이미지 보기)
- 로그 창에서 다음 세부정보를 확인합니다.
- 상태 코드:
502
- 결함 소스:
target
- 오류 코드:
protocol.http.ResponseWithBody
.
- 상태 코드:
- 오류 소스의 값이
target
이고 오류 코드의 값이protocol.http.ResponseWithBody
이면 백엔드 서버가 응답 본문 또는 가능한 원인 섹션에 언급된 헤더 중 하나와 함께204 No Content
또는205 Reset Content
상태 코드를 전송했기 때문에 오류가 발생했음을 나타냅니다.
추적 도구
Trace 도구를 사용하여 오류를 진단하려면 다음 단계를 따르세요.
- trace 세션과 다음 중 하나를 사용 설정합니다.
502 Bad Gateway
오류가 발생할 때까지 기다립니다.- 문제를 재현할 수 있는 경우 API를 호출하여
502 Bad Gateway
오류를 재현합니다.
Show all FlowInfos(모든 FlowInfos 표시)가 사용 설정되어 있는지 확인합니다.
- 실패한 요청 중 하나를 선택하고 트레이스를 검사합니다.
- trace의 여러 단계를 살펴보고 오류가 발생한 위치를 찾습니다.
일반적으로 아래와 같이 Request sent to target server 단계 직후에
flowinfo
Error를 확인할 수 있습니다.시나리오 #1
시나리오 #1: 백엔드 서버가 응답 본문 또는 가능한 원인에 나열된 헤더 중 하나가 포함된 상태 코드
204 No Content
로 응답합니다.트레이스에서 다음 값을 확인합니다.
- 오류:
Received 204 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
시나리오 #2
시나리오 #2: 백엔드 서버가 응답 본문 또는 가능한 원인에 나열된 헤더 중 하나가 포함된 상태 코드
204 No Content
로 응답합니다.트레이스에서 다음 값을 확인합니다.
- 오류:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
- 오류:
- 추적에서 AX (애널리틱스 데이터 기록됨) 단계로 이동하여 클릭합니다.
단계 세부정보, 오류 헤더 섹션까지 아래로 스크롤하여 아래와 같이 X-Apigee-fault-code 및 X-Apigee-fault-source의 값을 확인합니다.
( 더 큰 이미지 보기)
- X-Apigee-fault-code 및 X-Apigee-fault-source의 값은 각각
are protocol.http.ResponseWithBody
과target
입니다. 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께204 No Content
또는205 Reset Content
상태 코드를 전송했기 때문에 오류가 발생했음을 나타냅니다.오류 값 X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
NGINX
NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- Private Cloud 사용자는 NGINX 액세스 로그를 사용하여 HTTP
502 Bad Gateway
에 대한 키 정보를 확인할 수 있습니다. NGINX 액세스 로그를 확인합니다.
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
여기서 ORG, ENV, PORT#는 실제 값으로 대체됩니다.
- 특정 기간(과거에 문제가 발생한 경우) 동안 오류 코드가
protocol.http.ResponseWithBody
인502
오류가 있는지 아니면502
와 함께 여전히 실패하는 요청이 있는지 검색합니다. protocol.http.ResponseWithBody
값과 일치하는 X-Apigee-fault-code가 포함된502
오류가 발견되면 X-Apigee-fault-source의 값을 확인합니다.NGINX 액세스 로그의 샘플 502 오류:
NGINX 액세스 로그의 위 샘플 항목에는 X- Apigee-fault-code 및 X-Apigee-fault-source에 대한 값이 있습니다.
응답 헤더 값 X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
- X-Apigee-fault-code 및 X-Apigee-fault-source의 값은 각각
protocol.http.ResponseWithBody
및target
입니다. 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께204 No Content
또는205 Reset Content
상태 코드를 전송했기 때문에 오류가 발생했음을 나타냅니다.
원인: 응답 본문 또는 백엔드 서버에서 204 응답이 있는 헤더
진단
- 일반적인 진단 단계에 설명된 대로 API Monitoring, Trace 도구, NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드 및 오류 소스를 확인합니다.
- 오류 코드가
protocol.http.ResponseWithBody
이고 오류 소스의 값이target
이면 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께204 No Content
또는205 Reset Content
상태 코드로 응답했음을 나타냅니다. 백엔드 서버가 실제로 응답 페이로드 본문 또는 가능한 원인에 언급된 하나 이상의 헤더를 전송했는지 확인하려면 다음 단계를 수행합니다.
Public Cloud 사용자이고 시스템에서 직접 백엔드 서버에 동일한 API 요청을 수행할 수 있는지 여부
- Private Cloud 사용자는 오류가 관찰되는 특정 조직 및 환경과 연결된 메시지 프로세서 중 하나에서 직접 백엔드 서버에 동일한 API 요청을 보낼 수 있습니다.
백엔드 서버에서 수신한 응답을 검토하고 응답 페이로드 본문 또는 위에 언급된 헤더 중 하나 이상이 포함되어 있는지 확인합니다. '예'인 경우 이로 인해 오류가 발생한 것입니다.
샘플 #1
샘플 #1: 콘텐츠 인코딩 헤더를 사용하는 백엔드 서버 응답 204
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-alive이 샘플에서는 백엔드 서버가
204 No Content
상태 코드와Content-Encoding: gzip
로 응답했습니다.샘플 #2
샘플 #2: 콘텐츠 길이 헤더가 있는 백엔드 서버 응답 204
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-alive이 샘플에서는 백엔드 서버가
204 No Content
상태 코드와Content-Length: 48
로 응답했습니다.샘플 #3
샘플 #3: 응답 본문이 있는 백엔드 서버 응답 205
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample Response
이 샘플에서 백엔드 서버는 응답 본문이
This is a sample Response.
인205 Reset Content
상태 코드로 응답했습니다.- 위의 모든 예에서 백엔드 서버가 응답 본문 또는 가능한 원인에 언급된 헤더 중 하나와 함께
204 No Content
또는205 Reset Content
상태 코드를 전송했습니다. - 따라서 Apigee Edge에서
502 Bad Gateway
상태 코드를 전송했으며 오류 코드는protocol.http.ResponseWithBody
입니다.
해상도
204 No Content
또는 205 Reset Content
응답을 Apigee Edge로 보낼 때 백엔드 서버가 항상 사양
RFC 7231, 섹션 6.3.6: 205 재설정 콘텐츠를 준수하는지 확인합니다. 즉, 백엔드 서버는 204 No Content
또는 205 Reset Content
응답의 일부로 다음을 전송하면 안 됩니다.
- 응답 페이로드 본문
- 그리고 다음 헤더 중 하나여야 합니다.
Content-Length
Content-Encoding
Transfer-Encoding
사양
백엔드 서버가 204 No Content
또는 205 Reset Content
응답을 보내지만 다음 RFC 사양을 준수하지 않는 경우 Apigee Edge는 502 Bad Gateway
상태 코드와 오류 코드 protocol.http.ResponseWithBody
로 응답합니다.
사양 |
---|
RFC 7231, 섹션 6.3.5: 204 콘텐츠 없음 |
RFC 7231, 섹션 6.3.6: 205 콘텐츠 재설정 |
핵심 사항
권장되는 솔루션은 응답 본문과 헤더(Content-Length
, Content-Encoding
, Transfer-Encoding
) 없이 204 No Content
및 205 Reset Content
상태 코드를 전송하도록 백엔드 서버를 수정하고
RFC 7231, 섹션 6.3.5: 204 No Content 및
RFC 7231, 섹션 6.3.6: 205 콘텐츠 재설정을 준수하는 것입니다.
Apigee 지원의 지원이 더 필요하면 진단 정보를 수집해야 하는 경우로 이동하세요.
진단 정보 수집 필요
다음 진단 정보를 수집한 다음 Apigee Edge 지원팀에 문의하세요.
Public Cloud 사용자인 경우 다음 정보를 제공합니다.
- 조직 이름
- 환경 이름
- API 프록시 이름
502
오류를 재현하는 데 사용된 전체curl
명령어- API 요청에 대한 추적 파일
Private Cloud 사용자인 경우 다음 정보를 제공하세요.
- 실패한 요청에 대해 발견된 전체 오류 메시지
- 환경 이름
- API 프록시 번들
- 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