414 요청 URI가 너무 김 - TooBigLine

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

증상

클라이언트 애플리케이션은 API 호출에 대한 응답으로 오류 코드 protocol.http.TooBigLine 와 함께 HTTP 상태 코드 414 Request-URI Too Long를 가져옵니다.

오류 메시지

클라이언트 애플리케이션은 다음 응답 코드를 가져옵니다.

HTTP/1.1 414 Request-URI Too Long

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

{
   "fault":{
      "faultstring":"request line size exceeding 7,168",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

위 오류 메시지의 faultstring에는 Apigee Edge의 요청 줄에 허용되는 한도인 7168 bytes (7KB)가 포함되어 있습니다.

가능한 원인

이 오류는 클라이언트 애플리케이션에서 HTTP 요청의 일부로 Apigee Edge로 전송하는 요청 줄의 크기가 Apigee Edge에서 허용되는 한도보다 큰 경우에 발생합니다.

이 오류의 가능한 원인을 알아보기 전에 요청 줄의 의미와 크기를 확인하는 방법을 알아보겠습니다.

요청 행 이해하기

일반적인 HTTP 요청은 세 부분으로 구성됩니다.

  1. 요청 줄
  2. ( HTTP 헤더 집합 )
  3. [ 본문 ]

요청 줄은 아래와 같이 세 부분으로 구성됩니다.

Request-Line = <Method> <Request-URI> <HTTP-Version>

클라이언트 애플리케이션이 서버로 HTTP 요청을 전송하는 경우 서버로 이동하는 첫 번째 줄에 위에서 설명한 요청 줄이 포함됩니다. 그 뒤에 헤더와 요청 본문/페이로드가 나옵니다.

다음 샘플 스크린샷은 일반적인 curl 요청, 요청 부분 (요청 행 포함), 응답 부분을 보여줍니다.

요청 행 크기 이해하기

  1. 위에 설명된 샘플에서 요청의 시작 줄 (첫 번째 줄)은 다음과 같습니다. 요청 줄이라고도 합니다.
    GET /test/ HTTP/1.1
    

    요청 줄의 크기는 19 ASCII characters를 포함하므로 ~19 bytes입니다. Apigee Edge에서 허용되는 한도의 범위이므로 요청이 오류 없이 처리되고 성공 응답을 받게 됩니다.

  2. 마찬가지로 위에 표시된 오류 메시지faultstring를 보면 "request line size exceeding 7,168"가 포함되어 있습니다. 클라이언트가 보낸 HTTP 요청의 요청 라인이 7,168바이트를 초과했음을 나타냅니다.

이 오류가 발생할 수 있는 원인은 다음과 같습니다.

원인 설명 다음에 관한 문제 해결 안내
요청 페이로드 크기가 허용 한도보다 큼 클라이언트 애플리케이션에서 Apigee Edge에 대한 HTTP 요청의 일부로 전송하는 요청 URI의 크기가 Apigee Edge에서 허용되는 한도보다 큽니다. Edge 퍼블릭 및 프라이빗 클라우드 사용자

일반적인 진단 단계

다음 도구/기술 중 하나를 사용하여 이 오류를 진단하세요.

API 모니터링

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

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

  3. 분석 > API 모니터링 > 조사 페이지로 이동합니다.
  4. 오류를 관찰한 특정 기간을 선택합니다.
  5. 시간을 기준으로 결함 코드를 표시합니다.
  6. 아래와 같이 오류 코드 protocol.http.TooBigLine 및 상태 코드 414가 있는 셀을 선택합니다.

    ( 더 큰 이미지 보기)

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

    ( 더 큰 이미지 보기)

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

    ( 더 큰 이미지 보기)

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

    • 상태 코드: 414
    • 결함 소스: apigee
    • 오류 코드: protocol.http.TooBigLine.
    • 요청 길이(바이트): 7244 (> 7KB)
  10. 오류 소스의 값이 apigee 또는 MP이면 오류 코드의 값이 protocol.http.TooBigLine이고 Request-Length가 7KB보다 크면 클라이언트의 HTTP 요청의 요청 URI가 Apigee에서 허용되는 한도보다 큰 것입니다.

추적 도구

NGINX

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

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

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

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

  3. 특정 기간 동안 414 오류가 있는지(과거에 문제가 발생한 경우) 또는 414와 함께 여전히 실패하는 요청이 있는지 검색합니다.
  4. X-Apigee-fault-code 값과 일치하는 X-Apigee-fault-code 가 포함된 414 오류가 있는 경우 X-Apigee-fault-code 의 값을 확인합니다.

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

    응답 헤더
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source policy

    요청 길이: 7244 (7.244KB > 허용 한도)

원인: 요청 페이로드 크기가 허용된 한도를 초과합니다.

진단

  1. 일반적인 진단 단계에 설명된 대로 API Monitoring, Trace 도구 또는 NGINX 액세스 로그를 사용하여 관찰된 오류의 오류 코드, 오류 소스, 요청 길이 크기를 확인합니다.
  2. 오류 소스의 값이 apigee 또는 MP이면 클라이언트 애플리케이션에서 Apigee로 보낸 요청 크기가 Apigee Edge에서 허용되는 한도보다 크다는 의미입니다.
  3. 다음 방법 중 하나를 사용하여 요청 줄 크기가 허용된 한도(7KB)를 초과했는지 확인할 수 있습니다.

    오류 메시지

    오류 메시지를 사용하여 유효성을 검사하려면 다음 안내를 따르세요.

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

    오류 메시지 샘플:

    "faultstring":"request line size exceeding 7,168"
    

    실제 요청

    실제 요청을 사용하여 유효성을 검사하려면 다음 안내를 따르세요.

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

    1. 요청에 전달된 URI의 크기를 확인합니다.
    2. URI의 크기가 Apigee Edge에서 허용되는 한도보다 크다면 이것이 문제의 원인입니다.

      샘플 요청:

      curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
      

      위의 경우 쿼리 매개변수 qparam의 값이 7KB보다 큽니다. 즉, 7K ASCII 문자가 포함되어 있습니다.

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

    메시지 프로세서 로그

    메시지 프로세서 로그를 사용하여 유효성을 검사하려면 다음 안내를 따르세요.

    프라이빗 클라우드 사용자는 메시지 프로세서 로그를 사용하여 요청 줄 크기가 Apigee Edge에서 허용되는 한도를 초과하는지 확인할 수 있습니다.

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

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

    2. 특정 기간 동안 414 오류가 있었는지 (과거에 문제가 발생한 경우) 414와 함께 여전히 실패하는 요청이 있는지 검색합니다. 다음과 같은 검색 문자열을 사용할 수 있습니다.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. system.log에서 다음과 유사한 행이 표시됩니다.
      2021-07-12 08:53:31,461  NIOThread@0 ERROR ADAPTORS.HTTP.FLOW -
      AbstractRequestListener.onException() : Request:null, uri:null,
      message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{
      code = protocol.http.TooBigLine, message = request line size exceeding 7,168,
      associated contexts = []}, context:Context@366f4217
      input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443
      Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849
      age=2254670ms lastIO=0ms isOpen=true)
      

      위의 오류 메시지에서 텍스트 message = request line size exceeding 7,168는 요청 URI 크기가 7KB를 초과함을 나타냅니다. 따라서 Apigee Edge는 com.apigee.errors.http.user.RequestURITooLong 예외를 발생시키고 오류 코드가 protocol.http.TooBigline 414 상태 코드를 클라이언트 애플리케이션에 반환합니다.

해상도

크기 수정

옵션 #1 [권장]: 허용된 한도보다 큰 요청 URI 크기를 전송하지 않도록 클라이언트 애플리케이션 수정

  1. 특정 클라이언트가 한도에 정의된 제한보다 큰 요청 URI 크기를 보내는 이유를 분석합니다.
  2. 바람직하지 않은 경우 허용 한도보다 작은 요청 URI 크기를 전송하도록 클라이언트 애플리케이션을 수정합니다.

    위에서 설명한 예시에서는 다음과 같이 긴 쿼리 매개변수를 요청 URL의 일부로 전달하는 대신 요청 본문/페이로드의 일부로 전달하여 문제를 해결할 수 있습니다.

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. 허용 한도를 초과하는 URI를 전송하려면 다음 옵션으로 이동합니다.

CwC

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

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

한도

Apigee는 클라이언트 애플리케이션과 백엔드 서버에서 Apigee Edge 한도요청/응답 줄 한도에 설명된 허용 한도를 초과하는 요청/응답 행을 전송하지 않을 것으로 예상합니다.

  1. 퍼블릭 클라우드 사용자인 경우 요청 및 응답 행의 최대 한도는 Apigee Edge 한도요청/응답 행 크기에 설명되어 있습니다.
  2. Private Cloud 사용자 의 경우 요청 및 응답 행의 기본 최대 한도를 수정했을 수 있습니다 (권장사항은 아님). 현재 한도를 확인하는 방법의 안내에 따라 최대 요청 행 크기 한도를 확인할 수 있습니다.

현재 한도를 확인하는 방법

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

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

    프라이빗 클라우드용 Apigee에서 구성된 요청 줄 크기의 한도가 7KB임을 나타냅니다.

Apigee 지원의 지원이 더 필요하면 진단 정보를 수집해야 하는 경우로 이동하세요.

진단 정보 수집 필요

다음 진단 정보를 수집한 다음 Apigee Edge 지원팀에 문의하세요.

Public Cloud 사용자인 경우 다음 정보를 제공합니다.

  • 조직 이름
  • 환경 이름
  • API 프록시 이름
  • 414 오류를 재현하는 데 사용된 전체 curl 명령어
  • API 요청에 대한 추적 파일

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

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