431 요청 헤더 필드가 너무 큼 - TooBigHeaders

Apigee Edge 문서입니다.
Go to the Apigee X 문서로 이동합니다.
info

증상

클라이언트 애플리케이션에 API 호출의 응답으로 오류 코드 protocol.http.TooBigHeaders 와 함께 HTTP 상태 코드 431 Request Header Fields Too Large가 발생합니다.

오류 메시지

클라이언트 애플리케이션에 다음 응답 코드가 발생합니다.

HTTP/1.1 431 Request Header Fields Too Large

또한 다음 오류 메시지가 표시될 수 있습니다.

{
   "fault":{
      "faultstring":"request headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

가능한 원인

이 오류는 HTTP 요청의 일부로 클라이언트 애플리케이션에서 Apigee Edge로 전송되는 모든 요청 헤더의 총 크기가 RFC 6585, 섹션 5: 431 요청 헤더 필드가 너무 큼에 따라 Apigee Edge에서 허용되는 한도보다 큰 경우에 발생합니다.

이 오류의 가능한 원인은 다음과 같습니다.

원인 설명 다음에 관한 문제 해결 안내
요청 헤더 크기가 허용된 한도보다 큼 Apigee Edge에 대한 HTTP 요청의 일부로 클라이언트 애플리케이션에서 전송되는 모든 헤더의 총 크기가 Apigee Edge에서 허용되는 한도보다 큽니다. Edge Public 및 Private Cloud 사용자

일반적인 진단 단계

다음 도구/기법 중 하나를 사용하여 이 오류를 진단합니다.

API 모니터링

API 모니터링을 사용하여 오류를 진단하려면 다음 단계를 따르세요.

  1. 적절한 역할을 가진 사용자로 Apigee Edge UI에 로그인합니다.
  2. 문제를 조사하려는 조직으로 전환합니다.

  3. 분석 > API 모니터링 > 조사 페이지로 이동합니다.
  4. 오류가 발생한 특정 기간을 선택합니다.
  5. 오류 코드 를 시간 에 대해 표시합니다.
  6. 아래와 같이 오류 코드 protocol.http.TooBigHeaders 및 상태 코드 431이 있는 셀을 선택합니다.

    ( 큰 이미지 보기)

  7. 아래와 같이 오류 코드 protocol.http.TooBigHeaders 에 대한 정보가 표시됩니다.

    ( 큰 이미지 보기)

  8. 로그 보기 를 클릭하고 실패한 요청의 행을 펼칩니다.

    ( 큰 이미지 보기)

  9. 로그 창에서 다음 세부정보를 확인합니다.

    • 상태 코드: 431
    • 오류 소스: apigee
    • 오류 코드: protocol.http.TooBigHeaders
    • 요청 길이(바이트): 32150 (> 25 KB)
  10. 오류 소스 의 값이 apigee 또는 MP이고 오류 코드 의 값이 protocol.http.TooBigHeaders이며 요청 길이 가 25KB를 초과하는 경우 HTTP 요청의 일부로 클라이언트 애플리케이션에서 전송되는 모든 요청 헤더의 총 크기가 Apigee에서 허용되는 한도보다 크다는 의미입니다.

trace 도구

NGINX

NGINX 액세스 로그를 사용하여 오류를 진단하려면 다음 단계를 따르세요.

  1. Private Cloud 사용자인 경우 NGINX 액세스 로그를 사용하여 HTTP 431 오류에 대한 주요 정보를 확인할 수 있습니다.
  2. NGINX 액세스 로그를 확인합니다.

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    여기서: ORG, ENV, PORT#는 실제 값으로 대체됩니다.

  3. 특정 기간(과거에 문제가 발생한 경우)에 431 오류가 있는지 또는 431로 인해 여전히 실패하는 요청이 있는지 검색합니다.
  4. X-Apigee-fault-code 가 protocol.http.TooBigHeaders 의 값과 일치하는 431 오류가 발견되면 X-Apigee-fault-source. 의 값을 확인합니다.

    NGINX 액세스 로그의 위 샘플 항목에는 X-Apigee-fault-code 및 X-Apigee-fault-source에 다음과 같은 값이 있습니다.

    응답 헤더 값
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source MP

    요청 길이: 40159 (40KB는 Apigee Edge의 요청 헤더에 허용되는 한도인 25KB보다 큼)

    위 샘플 로그 항목에서 X-Apigee-fault-source의 값은 apigee 또는 MP이고 X-Apigee-fault-code의 값은 protocol.http.TooBigHeaders이며 요청 길이는 Apigee에서 허용되는 한도인 25KB보다 큰 40KB입니다. 이는 HTTP 요청의 일부로 클라이언트 애플리케이션에서 전송되는 모든 요청 헤더의 총 크기가 Apigee Edge에서 허용되는 한도인 25KB를 초과했음을 명확하게 나타냅니다.

원인: 요청 헤더 크기가 허용된 한도보다 큼

진단

  1. 일반적인 진단 단계에 설명된 대로 API 모니터링 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드, 오류 소스, 요청 길이 크기를 확인합니다.
  2. 오류 소스 의 값이 apigee 또는 MP이고 오류 코드 의 값이 protocol.http.TooBigHeaders이며 요청 길이 가 25KB를 초과하는 경우 클라이언트 애플리케이션에서 Apigee로 전송되는 요청 크기가 Apigee Edge에서 허용되는 한도보다 크다는 의미입니다.
  3. 다음 방법 중 하나를 사용하여 요청 헤더 크기가 허용되는 한도인 25KB를 초과했는지 확인할 수 있습니다:

    오류 메시지

    오류 메시지를 사용하여 확인하려면 다음 단계를 따르세요.

    Apigee Edge에서 수신한 전체 오류 메시지에 액세스할 수 있는 경우 faultstring을 참조하세요. faultstring은 요청 헤더의 총 크기가 허용되는 한도인 25KB를 초과했음을 나타냅니다.

    샘플 오류 메시지:

    "faultstring":"request headers size exceeding 25,600"

    실제 요청

    실제 요청을 사용하여 확인하려면 다음 단계를 따르세요.

    클라이언트 애플리케이션에서 보낸 실제 요청에 액세스할 수 있는 경우 다음 단계를 따르세요.

    1. 요청에 전달된 헤더의 크기를 확인합니다.
    2. 헤더의 총 크기가 Apigee Edge에서 허용되는 한도보다 큰 경우 문제가 발생한 원인입니다.

      샘플 요청:

      curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
      

      위의 경우 헤더 header0, header1, header2, 및 header3의 총 크기가 25KB보다 큽니다. 즉, 25,000개 이상의 ASCII 문자 (바이트)가 포함되어 있습니다.

      다른 클라이언트를 사용하는 경우 클라이언트 로그를 검토하고 요청 줄의 크기를 확인해 보세요.

    메시지 프로세서 로그

    메시지 프로세서 로그를 사용하여 확인하려면 다음 단계를 따르세요.

    Private Cloud 사용자라면 메시지 프로세서 로그를 사용하여 요청 헤더 크기가 Apigee Edge에서 허용되는 한도를 초과했는지 확인할 수 있습니다.

    1. 메시지 프로세서 로그를 확인합니다.

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. 특정 기간 (과거에 문제가 발생한 경우)에 431 오류가 있는지 또는 431로 인해 여전히 실패하는 요청이 있는지 검색합니다. 다음 검색어를 사용할 수 있습니다.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. 다음과 비슷한 system.log의 줄이 표시됩니다.
      2021-07-27 08:30:28,419  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() :
      Request:GET, uri:/test/, message Id:null,
      exception:com.apigee.errors.http.user.RequestHeadersTooLarge{
      code = protocol.http.TooBigHeaders, message = request headers size
      exceeding 25,600, associated contexts = []}, context:Context@9c5903
      input=ClientInputChannel(SSLClientChannel[Accepted:
      Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130
      useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms  lastIO=0ms
      isOpen=true)

      위 오류 메시지의 텍스트 message = request headers size exceeding 25,600은 총 요청 헤더 크기가 25KB를 초과함을 나타냅니다. 따라서 Apigee Edge는 예외 com.apigee.errors.http.user.RequestHeadersTooLarge를 발생시키고 오류 코드 protocol.http.TooBigHeaders 와 함께 431 상태 코드를 클라이언트 애플리케이션에 반환합니다.

해상도

크기 수정

옵션 1[권장]: 총 크기가 허용되는 한도를 초과하는 요청 헤더를 전송하지 않도록 클라이언트 애플리케이션 수정

  1. 특정 클라이언트가 한도에 정의된 허용되는 한도를 초과하는 총 헤더 크기를 만드는 큰 크기의 요청 헤더를 전송하는 이유를 분석합니다. 한도.
  2. 원하지 않는 경우 허용되는 한도보다 작은 크기의 요청 헤더를 전송하도록 클라이언트 애플리케이션을 수정합니다.

    위에서 설명한 예에서는 요청 본문/페이로드의 일부로 긴 헤더 값 매개변수를 전달하여 문제를 해결할 수 있습니다.

    curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'
    
  3. 원하는 경우 허용되는 한도를 초과하는 헤더를 전송하려면 다음 옵션으로 이동합니다.

CwC

옵션 2 : CwC 속성을 사용하여 요청 줄 한도 늘리기

Apigee는 요청 줄 크기 한도를 늘릴 수 있는 CwC 속성을 제공합니다. 자세한 내용은 메시지 프로세서에서 요청 줄 한도 설정을 참조하세요.

한도

Apigee는 클라이언트 애플리케이션과 백엔드 서버가 Apigee Edge 한도의 요청/응답 헤더 크기 한도에 문서화된 허용되는 한도보다 큰 요청/응답 헤더를 전송하지 않도록 합니다.

  1. Public Cloud 사용자인 경우 요청 및 응답 헤더 크기의 최대 한도는 Apigee Edge 한도의 요청/응답 헤더 크기에 문서화된 대로입니다.
  2. Private Cloud 사용자 인 경우 요청 및 응답 헤더 크기의 기본 최대 한도를 수정했을 수 있습니다 (권장되는 방법은 아님). 현재 한도를 확인하는 방법 의 안내에 따라 최대 요청 헤더 크기 한도를 확인할 수 있습니다.

현재 한도를 확인하는 방법

이 섹션에서는 메시지 프로세서에서 HTTPRequest.headers.limit 속성이 새 값으로 업데이트되었는지 확인하는 방법을 설명합니다.

  1. 메시지 프로세서 머신에서 속성 HTTPRequest.headers.limit을(를) /opt/apigee/edge-message-processor/conf 디렉터리에서 검색하고 아래와 같이 설정된 값을 확인합니다.
    grep -ri "HTTPRequest.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. 위 명령어의 샘플 결과는 다음과 같습니다.
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.headers.limit=25k
  3. 위 예시 출력에서 http.properties의 HTTPRequest.headers.limit 속성이 25k 값으로 설정되어 있습니다.

    이는 Private Cloud용 Apigee에서 구성된 요청 헤더 크기 한도가 25KB임을 나타냅니다.

사양

Apigee Edge는 클라이언트 애플리케이션이 요청의 일부로 큰 크기의 헤더를 전송하지 않도록 합니다. 요청. 요청에 지정된 한도를 초과하는 총 크기의 헤더가 포함된 경우 Apigee는 다음 RFC 사양에 따라 431 Request Header Fields Too Large 를 발생시킵니다.

사양
RFC 6585, 섹션 5: 431 요청 헤더 필드가 너무 큼

Apigee 지원팀의 지원이 여전히 필요한 경우 진단 정보 수집 필요로 이동하세요.

진단 정보 수집 필요

다음 진단 정보를 수집한 후 Apigee Edge 지원팀에 문의합니다.

Public Cloud 사용자인 경우 다음 정보를 제공하세요.

  • 조직 이름
  • 환경 이름
  • API 프록시 이름
  • 431 오류를 재현하는 데 사용되는 전체 curl 명령어
  • API 요청의 trace 파일

Private Cloud 사용자인 경우 다음 정보를 제공하세요.

  • 실패한 요청에 대해 관찰된 전체 오류 메시지
  • 조직 이름
  • 환경 이름
  • API 프록시 번들
  • 실패한 API 요청의 trace 파일
  • 431 오류를 재현하는 데 사용되는 전체 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