<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
증상
클라이언트 애플리케이션이 HTTP 상태 코드 413 Request Entity Too Large
를 가져옵니다.
API 호출에 대한 응답으로 오류 코드 protocol.http.TooBigBody
를 포함합니다.
오류 메시지
클라이언트 애플리케이션은 다음과 같은 응답 코드를 받습니다.
HTTP/1.1 413 Request Entity Too Large
또한 다음과 같은 오류 메시지가 표시될 수 있습니다.
{ "fault":{ "faultstring":"Body buffer overflow", "detail":{ "errorcode":"protocol.http.TooBigBody" } } }
가능한 원인
이 오류는 클라이언트 애플리케이션에서 Apigee Edge로 전송한 페이로드 크기가 HTTP 요청이 Apigee Edge에서 허용되는 한도보다 큽니다 .
이 오류의 가능한 원인은 다음과 같습니다.
원인 | 설명 | 다음에 관한 문제 해결 안내 |
---|---|---|
요청 페이로드 크기가 허용된 한도보다 큽니다. | 클라이언트 애플리케이션에서 Apigee Edge에 대한 HTTP 요청의 일부로 전송하는 페이로드 크기는 Apigee Edge의 허용 한도를 초과합니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
다음 날짜 이후에 요청 페이로드 크기가 허용 한도를 초과함 압축 해제 | HTTP의 일부로 클라이언트 애플리케이션에서 압축된 형식으로 전송한 페이로드 크기 Apigee Edge에 대한 요청 수가 Apigee Edge에서 압축 해제할 때 허용되는 한도를 초과합니다. | 에지 퍼블릭 및 프라이빗 클라우드 사용자 |
일반적인 진단 단계
다음 도구/기술 중 하나를 사용하여 이 오류를 진단합니다.
API 모니터링
<ph type="x-smartling-placeholder">API 모니터링을 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- <ph type="x-smartling-placeholder"></ph> 다음 계정으로 Apigee Edge UI에 로그인: 역할을 수행하는 것이 좋습니다.
문제를 조사하려는 조직으로 전환합니다.
- 분석 > API 모니터링 > 조사 페이지를 엽니다.
- 오류가 관찰된 특정 기간을 선택합니다.
- 프록시 필터를 선택하여 오류 코드의 범위를 좁힐 수 있습니다.
- 시간을 기준으로 결함 코드를 표시합니다.
결함 코드
protocol.http.TooBigBody
가 있는 셀을 선택합니다. Status Code:413
결함 코드
protocol.http.TooBigBody
에 대한 정보는 다음과 같이 표시됩니다. 다음과 같습니다.- 로그 보기를 클릭하고 실패한 요청의 행을 펼칩니다. 그런 다음
로그 창에서 아래에 표시된 세부정보를 확인합니다.
비압축
시나리오 #1: 비압축 형식으로 전송된 요청 페이로드
로그 창에서 다음 세부정보를 확인합니다.
- 상태 코드:
413
- 오류 소스:
proxy
- 오류 코드:
protocol.http.TooBigBody
. - 요청 길이(바이트):
15360440
(~15MB)
결함 소스의 값이
proxy
이면 결함 코드입니다. 값은protocol.http.TooBigBody
이며 요청 길이가 포함됩니다. 10MB를 초과하는 경우 클라이언트의 HTTP 요청에 요청 페이로드 크기가 Apigee에서 허용되는 한도보다 큽니다.압축
시나리오 #2: 압축된 형식으로 전송된 요청 페이로드
로그 창에서 다음 세부정보를 확인합니다.
- 상태 코드:
413
- 오류 소스:
proxy
- 오류 코드:
protocol.http.TooBigBody
. - 요청 길이(바이트):
15264
(~15KB)
결함 소스의 값이
proxy
이면 결함 코드입니다. 값이protocol.http.TooBigBody
이고 요청 길이가 10MB 미만이면 클라이언트의 HTTP 요청에 요청 페이로드 크기가 압축된 형식의 허용된 제한보다 작아야 하지만 페이로드 크기가 Apigee로 압축하지 않을 때 허용되는 한도보다 큽니다. - 상태 코드:
Trace
<ph type="x-smartling-placeholder">Trace 도구를 사용하여 오류를 진단하는 방법은 다음과 같습니다.
- 추적 세션을 사용 설정하고 다음 중 하나를 수행합니다.
<ph type="x-smartling-placeholder">
- </ph>
413 Request Entity Too Large
오류가 발생할 때까지 기다리거나- 문제를 재현할 수 있다면 API를 호출하고 재현합니다.
오류
413 Request Entity Too Large
개
Show all Flow Infos(모든 흐름 정보 표시)가 사용 설정되어 있는지 확인합니다.
- 실패한 요청 중 하나를 선택하고 trace를 검토합니다.
- Request Received from Client 단계로 이동합니다.
비압축
시나리오 #1: 비압축 형식으로 전송된 요청 페이로드
다음 정보를 참고하세요.
- Content-Encoding: 없음
- 콘텐츠 길이:
15360204
압축
시나리오 #2: 압축된 형식으로 전송된 요청 페이로드
다음 정보를 참고하세요.
- 콘텐츠 인코딩:
gzip
- 콘텐츠 길이:
14969
- 콘텐츠 유형:
application/x-gzip
- 추적의 여러 단계를 살펴보고 오류가 발생한 위치를 찾습니다.
오류는 일반적으로 Request Received from Client 단계의 다음 안내를 따르세요.
- 트레이스에서 오류 값을 확인합니다. 위의 샘플 trace는 다음을 보여줍니다.
<ph type="x-smartling-placeholder">
- </ph>
- 오류:
Body buffer overflow
- error.class:
com.apigee.errors.http.user.RequestTooLarge
- 오류:
Response Sent to Client로 이동하여 trace를 반환합니다. 아래의 샘플 트레이스는 다음과 같습니다.
- 오류:
413 Request Entity Too Large
- 오류 콘텐츠:
<ph type="x-smartling-placeholder">
{"fault":{"faultstring":"Body buffer overflow","detail":{"errorcode":"protocol.http.TooBigBody"}}}
</ph>
- 오류:
- 트레이스의 AX (애널리틱스 데이터 기록됨) 단계로 이동하여 클릭합니다.
단계 세부정보 섹션에서 변수 읽기까지 아래로 스크롤합니다.
- 다음을 나타내는 client.received.content.length 변수의 값을 결정합니다.
<ph type="x-smartling-placeholder">
- </ph>
- 요청 페이로드가 압축되지 않은 형식으로 전송될 때의 실제 크기이며
- 페이로드가 다음에 해당하는 경우 Apigee에서 압축 해제 시 요청 페이로드의 크기입니다. 압축된 형식으로 전송됩니다 허용되는 한도 (10MB)로 제한됩니다.
비압축
시나리오 #1: 비압축 형식의 페이로드 요청
client.received.content.length 변수:
15360204
압축
시나리오 #2: 압축된 형식의 요청 페이로드
client.received.content.length 변수:
10489856
- 다음 표에서는 다음 조건에서 Apigee가
413
오류를 반환하는 이유를 설명합니다. client.received.content.length 변수 값에 기반한 두 가지 시나리오가 있습니다.시나리오 client.received.content.length 값 실패 이유 비압축 형식의 요청 페이로드 약 15MB 크기 > 허용되는 한도는 10MB입니다. 압축된 형식의 페이로드 요청 약 10MB 압축 해제 시 크기 제한을 초과했습니다.
<ph type="x-smartling-placeholder">
NGINX
<ph type="x-smartling-placeholder">NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 안내를 따르세요.
- Private Cloud 사용자인 경우 NGINX 액세스 로그를 사용하여
HTTP
413
오류에 대한 주요 정보입니다. NGINX 액세스 로그를 확인합니다.
<ph type="x-smartling-placeholder">/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- 특정 기간 동안
413
오류가 있는지 검색하여 확인합니다( 이전에 발생한 적이 있는지) 또는 여전히413
- 일치하는 X-Apigee-fault-code 에
413
오류가 있는 경우protocol.http.TooBigBody
의 값을 사용하고 X-Apigee-fault-source.비압축
시나리오 #1 : 비압축 형식의 요청 페이로드 크기
NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee-fault-code 및 X-Apigee-fault-code 에 대한 값이 다음과 같습니다.
응답 헤더 값 X-Apigee-fault-code protocol.http.TooBigBody
X-Apigee-fault-sourc policy
요청 길이:
15360440
(14.6MB > 허용 한도)를 참고하세요.압축
시나리오 #2 : 압축된 형식의 페이로드 크기 요청
NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee-fault-code 및 X-Apigee-fault-code
응답 헤더 값 X-Apigee-fault-code protocol.http.TooBigBody
X-Apigee-fault-source policy
요청 길이:
15264
(14.9K < 허용 한도)를 참고하세요.이 시나리오에서는 Apigee Edge가
413
요청 시간이 길어질 수 있으므로 요청 길이가 허용 한도보다 낮습니다. 압축된 형식으로 전송되었는데 페이로드의 크기가 Apigee Edge의 압축 해제 시 한도
원인: 요청 페이로드 크기가 허용된 한도를 초과합니다.
진단
- 오류 코드, 오류 소스, 요청 페이로드 크기를 'API 모니터링', '추적 도구' 또는 'NGINX 액세스 로그'에 설명된 대로 시나리오 1 (비압축)의 일반적인 진단 단계
- 결함 소스의 값이
policy
또는proxy
이면 클라이언트 애플리케이션에서 Apigee로 보낸 요청 페이로드 크기가 다음보다 큼을 나타냅니다. Apigee Edge에서 허용되는 한도입니다. - 1단계에서 결정한 Request Payload Size(요청 페이로드 크기)를 확인합니다.
- 페이로드 크기가 허용되는 한도가 10MB인 경우 오류의 원인이 됩니다.
- 페이로드 크기가 허용되는 한도가 10MB인 경우 요청이 압축된 형식으로 전달됩니다 원인: 압축 해제 후 요청 페이로드 크기가 허용 한도를 초과함
- 요청 페이로드 크기가 실제로 10MB 허용 한도
다음 단계에 따라 실제 요청을 확인합니다.
<ph type="x-smartling-placeholder">
- </ph>
- 클라이언트 애플리케이션에서 실행한 실제 요청에 액세스할 수 없는 경우 해결 방법.
- 클라이언트 애플리케이션이 수행한 실제 요청에 액세스할 수 있는 경우
다음 단계를 따르세요.
<ph type="x-smartling-placeholder">
- </ph>
- 요청에서 전달된 페이로드의 크기를 확인합니다.
- 페이로드 크기가 허용되는 한도가 원인일 수 있습니다.
샘플 요청:
curl http://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile -v
위의 경우
test15mbfile
파일의 크기는 최대 15MB입니다. 만약 클라이언트 로그를 가져와서 전송 중인 페이로드 크기를 확인합니다.
해상도
Resolution(해결 방법)으로 이동합니다.
원인: 압축 해제 후 요청 페이로드 크기가 허용 한도를 초과함
요청 페이로드가 압축 형식과 요청 헤더로 전송되는 경우
Content-Encoding
를 gzip,
로 설정하면 Apigee가 요청 압축을 풀어줍니다.
페이로드가 포함되어 있습니다 압축 해제 프로세스 중 Apigee가 페이로드 크기가 더 크다고 확인한 경우
10MB 초과
<ph type="x-smartling-placeholder"></ph>
허용 한도로 설정된 상태에서 다시 압축 해제를 중지하고 다시 응답합니다.
즉시 413 Request Entity Too Large
(오류 코드 포함)
protocol.http.TooBigBody
입니다.
진단
- 오류 코드,오류 소스, 요청 페이로드 크기를 결정합니다. 'API 모니터링, Trace Tool 또는 NGINX 액세스 로그'에서 설명한 대로 시나리오 #2 (압축)의 일반적인 진단 단계
- 결함 소스의 값이
policy
또는proxy
인 경우 클라이언트 애플리케이션에서 Apigee로 보낸 요청 페이로드 크기가 더 크다는 것을 나타냅니다. Apigee Edge에서 허용되는 한도보다 높습니다. - 1단계에서 결정한 Request Payload Size(요청 페이로드 크기)를 확인합니다.
- 페이로드 크기가 허용되는 한도가 10MB인 경우 오류의 원인이 됩니다.
- 페이로드 크기가 허용되는 한도가 10MB인 경우 요청이 압축된 형식으로 전달됩니다 이 경우 압축되지 않은 파일 크기가 있는지 압축된 요청 페이로드가 있습니다
- 클라이언트의 요청이 압축된 형식으로 전송되었는지
압축되지 않은 크기가 다음 중 하나를 사용하여 허용되는 한도보다 큽니다.
메서드:
Trace
Trace 도구를 사용하여 확인하려면 다음 단계를 따르세요.
- 실패한 요청의 trace를 캡처한 경우 다음에 자세히 설명된 단계를 참조하세요.
Trace 및
<ph type="x-smartling-placeholder">
- </ph>
- client.received.content.length 변수의 값을 결정합니다.
- 클라이언트의 요청에 Content-Encoding:
gzip
헤더
- client.received.content.length 변수의 값이
10MB,
<ph type="x-smartling-placeholder"></ph>
허용되는 한도, 요청 헤더 Content-Encoding:
gzip
, 를 클릭하면 이 오류의 원인이 됩니다.
실제 요청
실제 요청을 사용하여 검증하려면 다음 안내를 따르세요.
- 클라이언트 애플리케이션에서 실행한 실제 요청에 액세스할 수 없는 경우 해결 방법.
- 클라이언트 애플리케이션이 수행한 실제 요청에 액세스할 수 있는 경우
다음 단계를 따르세요.
<ph type="x-smartling-placeholder">
- </ph>
- 요청에 전달된 페이로드의 크기를
Content-Encoding
헤더가 요청에 포함되어 있습니다. 압축되지 않은 페이로드 크기가 Apigee Edge에서 허용되는 한도
샘플 요청:
curl https://<hostalias>/testtoobigbody -k -X POST -F file=@test15mbfile.gz -H "Content-Encoding: gzip" -v
위의 경우
test15mbfile.gz
파일이 크기 제한보다 작습니다. 압축되지 않은 파일test15mbfile
의 크기는 최대 15MB이며Content-Encoding
헤더는gzip
입니다.다른 클라이언트를 사용하는 경우 클라이언트 로그를 가져와 페이로드 크기를 확인합니다.
Content-Encoding
헤더가gzip
로 설정되어 있는지 확인합니다.
- 요청에 전달된 페이로드의 크기를
메시지 프로세서 로그
메시지 프로세서 로그를 사용하여 유효성을 검사하려면 다음 단계를 따르세요.
<ph type="x-smartling-placeholder">- 프라이빗 클라우드 사용자인 경우 메시지 프로세서 로그를 사용하여
HTTP
413
오류에 대한 주요 정보입니다. 메시지 프로세서 로그를 확인합니다.
/opt/apigee/var/log/edge-message-processor/logs/system.log
특정 기간 동안
413
오류가 있는지 검색하여 확인합니다( 문제가 과거에 발생함) 또는413
로 여전히 실패하는 요청이 있는지 확인하세요.다음과 같은 검색 문자열을 사용할 수 있습니다.
grep -ri "chunkCount"
grep -ri "RequestTooLarge"
system.log
에서 다음과 유사한 줄이 표시됩니다.TotalRead
및chunkCount
는 상황에 따라 다를 수 있습니다.2021-07-06 13:29:57,544 NIOThread@1 ERROR HTTP.SERVICE - TrackingInputChannel.checkMessageBodyTooLarge() : Message is too large. TotalRead 10489856 chunkCount 2570 2021-07-06 13:29:57,545 NIOThread@1 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: com.apigee.errors.http.user.RequestTooLarge : Body buffer overflow
- 압축 해제 프로세스 중 메시지 프로세서가 전체
읽기 바이트 10MB인 경우 중지되고 다음 줄을 출력합니다.
Message is too large. TotalRead 10489856 chunkCount 2570
요청 페이로드 크기가 10MB를 초과하며 Apigee에서 크기가 10MB 한도를 초과하기 시작하면
<ph type="x-smartling-placeholder">RequestTooLarge
오류 발생 오류 코드는protocol.http.TooBigBody
임
- 실패한 요청의 trace를 캡처한 경우 다음에 자세히 설명된 단계를 참조하세요.
Trace 및
<ph type="x-smartling-placeholder">
해상도
<ph type="x-smartling-placeholder">크기 수정
옵션 #1 [권장]: 페이로드 크기가 허용되는 한도
<ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">- </ph>
- 특정 클라이언트가 허용된 것보다 큰 요청 / 페이로드 크기를 전송하는 이유를 분석합니다. 한도에 정의된 대로 한도를 포함합니다.
바람직하지 않은 경우 요청 / 페이로드를 전송하도록 클라이언트 애플리케이션을 수정합니다. 허용되는 한도보다 작은 크기를 허용하는 것이 좋습니다.
위에서 설명한 예에서는 더 작은 크기의 파일을 전달하여 문제를 해결할 수 있습니다. 아래와 같이
test5mbfile
(크기 5MB) 페이로드를 가정해 보겠습니다.curl https://<host>/testtoobigbody -k -X POST -F file=@test5mbfile -v
- 허용 한도보다 많은 요청/페이로드를 전송하려면 확인할 수 있습니다.
서명된 URL 패턴
옵션 2 [권장]: Apigee Java콜아웃 내에서 서명된 URL 패턴 사용
<ph type="x-smartling-placeholder">10MB보다 큰 페이로드의 경우 Apigee는 Apigee 자바 콜아웃 <ph type="x-smartling-placeholder"></ph> GitHub의 Edge 콜아웃: 서명된 URL 생성기 예
스트리밍
옵션 #3 : 스트리밍 사용
API 프록시가 대용량 요청 및/또는 응답을 처리해야 하는 경우, streaming입니다.
<ph type="x-smartling-placeholder">CwC
옵션 4 : CwC 속성을 사용하여 버퍼 한도 늘리기
<ph type="x-smartling-placeholder">이 옵션은 권장 옵션을 사용할 수 없는 경우에만 사용해야 합니다. 기본 크기가 증가하면 성능 문제가 될 수 있습니다.
Apigee는 CwC 속성을 사용하면 요청 및 응답 페이로드 크기 제한. 자세한 내용은 <ph type="x-smartling-placeholder"></ph> 라우터 또는 메시지 프로세서의 메시지 크기 한도 설정
<ph type="x-smartling-placeholder">한도
Apigee는 클라이언트 애플리케이션 및 백엔드 서버에서 다음보다 큰 페이로드 크기를 전송하지 않을 것으로 예상합니다.
Request/response size
에 문서화된 허용 한도
Apigee Edge 한도.
- 퍼블릭 클라우드 사용자인 경우 요청 및 응답의 최대 한도
페이로드 크기는 다음의
Request/response size
에 대해 문서화되어 있습니다. Apigee Edge 한도. - Private Cloud 사용자 인 경우 요청 및 응답 페이로드 크기에 대한 제한이 없습니다. 다음 안내에 따라 최대 요청 페이로드 크기 한도를 결정할 수 있습니다. 현재 한도를 확인하는 방법
현재 한도를 확인하는 방법
<ph type="x-smartling-placeholder">이 섹션에서는 HTTPRequest.body.buffer.limit
속성이
메시지 프로세서의 새 값으로 업데이트되었습니다.
- 메시지 프로세서 머신에서 속성
/opt/apigee/edge-message- processor/conf
디렉터리의HTTPRequest.body.buffer.limit
를 찾고 다음을 사용하여 어떤 값이 설정되어 있는지 확인합니다. 명령어: <ph type="x-smartling-placeholder">grep -ri "HTTPRequest.body.buffer.limit" /opt/apigee/edge-message-processor/conf
</ph> - 위 명령어의 샘플 결과는 다음과 같습니다.
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.body.buffer.limit=10m
위의 예시 출력에서 속성이
HTTPRequest.body.buffer.limit
이(가)10m
값으로 설정되었습니다.http.properties
입니다.비공개용 Apigee에 구성된 요청 페이로드 크기의 한도를 나타냅니다. 클라우드는 10MB입니다.
Apigee 지원팀의 도움이 더 필요하면 다음 페이지로 이동하세요. 진단 정보를 수집해야 합니다.
진단 정보 수집 필요
다음 진단 정보를 수집한 후 Apigee Edge 지원팀에 문의하세요.
퍼블릭 클라우드 사용자인 경우 다음 정보를 입력합니다.
- 조직 이름
- 환경 이름
- API 프록시 이름
413
오류를 재현하는 데 사용된 전체 curl 명령어- API 요청에 대한 추적 파일
Private Cloud 사용자인 경우 다음 정보를 입력합니다.
- 실패한 요청에 대해 발견된 전체 오류 메시지
- 조직 이름
- 환경 이름
- API 프록시 번들
- 실패한 API 요청의 추적 파일
413
오류를 재현하는 데 사용된 전체 curl 명령어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