431 अनुरोध के हेडर के फ़ील्ड बहुत बड़े हैं - TOBigHeaders

Apigee Edge दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं.
जानकारी

समस्या का ब्यौरा

क्लाइंट ऐप्लिकेशन को एपीआई कॉल के रिस्पॉन्स के तौर पर, गड़बड़ी कोड protocol.http.TooBigHeaders के साथ 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"
      }
   }
}

संभावित कारण

यह गड़बड़ी तब होती है, जब एचटीटीपी अनुरोध के हिस्से के तौर पर, क्लाइंट ऐप्लिकेशन से Apigee Edge को भेजे गए सभी अनुरोध हेडर का कुल साइज़, आरएफ़सी 6585, सेक्शन 5: 431 अनुरोध हेडर के फ़ील्ड बहुत बड़ा के मुताबिक Apigee Edge में स्वीकार की गई सीमा से ज़्यादा हो.

इस गड़बड़ी की ये वजहें हो सकती हैं:

वजह ब्यौरा समस्या हल करने के लिए निर्देश
अनुरोध के हेडर का साइज़, तय सीमा से ज़्यादा है क्लाइंट ऐप्लिकेशन से Apigee Edge को भेजे गए एचटीटीपी अनुरोध के तहत, भेजे गए सभी हेडर का कुल साइज़ Apigee Edge में दी गई अनुमति वाली सीमा से ज़्यादा है. Edge के सार्वजनिक और निजी क्लाउड के उपयोगकर्ता

निदान के सामान्य चरण

इस गड़बड़ी का पता लगाने के लिए, नीचे दिए गए किसी टूल/तकनीक का इस्तेमाल करें:

एपीआई मॉनिटरिंग

एपीआई मॉनिटरिंग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:

  1. सही भूमिका वाले उपयोगकर्ता के तौर पर, Apigee Edge के यूज़र इंटरफ़ेस (यूआई) में साइन इन करें.
  2. उस संगठन पर जाएं जिसमें आपको समस्या की जांच करनी है.

  3. विश्लेषण करें > एपीआई की निगरानी करना > जांच करें पेज पर जाएं.
  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 और अनुरोध की अवधि 25 केबी से ज़्यादा है. इससे पता चलता है कि एचटीटीपी अनुरोध के तहत क्लाइंट ऐप्लिकेशन से भेजे गए सभी अनुरोध हेडर का कुल साइज़ Apigee में तय सीमा से ज़्यादा है.

ट्रेस टूल

NGINX

NGINX ऐक्सेस लॉग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:

  1. अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो आपके पास NGINX ऐक्सेस लॉग का इस्तेमाल करके, एचटीटीपी 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 की वैल्यू, X-Apigee-fault-code से मेल खाने वाली कोई 431 गड़बड़ी मिलती है, तो X-Apigee-fault-code की वैल्यू तय करें.

    NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में X-Apigee-fault-code और X-Apigee-fault-code के लिए ये वैल्यू दी गई हैं:

    रिस्पॉन्स हेडर वैल्यू
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source MP

    ध्यान दें: 40159 (40 केबी का साइज़ 25 केबी से ज़्यादा होना चाहिए, Apigee Edge में अनुरोध के हेडर के लिए तय की गई सीमा)

    ऊपर दिए गए सैंपल लॉग एंट्री में, X-Apigee-fault-source की वैल्यू apigee या MP है, X-Apigee-fault-code की वैल्यू protocol.http.TooBigHeaders और अनुरोध की अवधि 40 केबी है, जो Apigee में तय सीमा से 25 केबी ज़्यादा है. इससे साफ़ तौर पर पता चलता है कि एचटीटीपी अनुरोध के तहत, क्लाइंट ऐप्लिकेशन से भेजे गए सभी अनुरोध हेडर का कुल साइज़, Apigee Edge में 25 केबी की तय सीमा से ज़्यादा हो गया है.

वजह: अनुरोध के हेडर का साइज़, तय सीमा से ज़्यादा है

संक्रमण की जांच

  1. एपीआई मॉनिटरिंग या NGINX ऐक्सेस लॉग का इस्तेमाल करके मिली गड़बड़ी के लिए, गलत कोड, गड़बड़ी का सोर्स, और अनुरोध की अवधि का साइज़ तय करें. गड़बड़ी की जानकारी पाने के सामान्य तरीके में बताया गया है.
  2. अगर गलत सोर्स की वैल्यू apigee या MP है, फ़ॉल कोड की वैल्यू protocol.http.TooBigHeaders है और अनुरोध की अवधि 25 केबी से ज़्यादा है, तो इससे पता चलता है कि क्लाइंट ऐप्लिकेशन की ओर से Apigee को भेजे गए अनुरोध का साइज़ Apigee Edge में तय सीमा से ज़्यादा है.
  3. नीचे दिए गए तरीकों में से किसी एक का इस्तेमाल करके यह पुष्टि की जा सकती है कि अनुरोध के हेडर का साइज़, 25 केबी की तय सीमा से ज़्यादा है या नहीं:

    गड़बड़ी का मैसेज

    गड़बड़ी के मैसेज का इस्तेमाल करके पुष्टि करने के लिए:

    अगर आपके पास Apigee Edge से मिले गड़बड़ी के पूरे मैसेज का ऐक्सेस है, तो faultstring देखें. faultstring से पता चलता है कि अनुरोध के हेडर का कुल साइज़ 25 केबी की तय सीमा से ज़्यादा है.

    गड़बड़ी के मैसेज का सैंपल:

    "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 हेडर का कुल साइज़ 25 केबी से ज़्यादा है. इसका मतलब है कि इसमें 25 केबी से ज़्यादा ASCII वर्ण (बाइट) हैं.

      अगर किसी दूसरे क्लाइंट का इस्तेमाल किया जा रहा है, तो क्लाइंट लॉग की समीक्षा करके, Apigee Edge को भेजी जा रही अनुरोध लाइन का साइज़ पता करने की कोशिश की जा सकती है.

    मैसेज प्रोसेसर के लॉग

    Message प्रोसेसर लॉग का इस्तेमाल करके पुष्टि करने के लिए:

    अगर आप Private Cloud के उपयोगकर्ता हैं, तो Message प्रोसेसर लॉग का इस्तेमाल करके यह पुष्टि की जा सकती है कि अनुरोध के हेडर का साइज़, 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 टेक्स्ट बताता है कि अनुरोध के हेडर का कुल साइज़ 25 केबी से ज़्यादा है. इसलिए, Apigee Edge, com.apigee.errors.http.user.RequestHeadersTooLarge अपवाद को फेंकता है और क्लाइंट ऐप्लिकेशन में 431 गड़बड़ी कोड protocol.http.TooBigHeaders वाला स्टेटस कोड दिखाता है.

रिज़ॉल्यूशन

साइज़ ठीक करें

पहला विकल्प [सुझाया गया]: क्लाइंट ऐप्लिकेशन की समस्या को ठीक करें, ताकि अनुरोध के हेडर का कुल साइज़, तय सीमा से ज़्यादा न हो

  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

दूसरा विकल्प : अनुरोध के लिए लाइन की सीमा बढ़ाने के लिए, CwC प्रॉपर्टी का इस्तेमाल करें

Apigee, एक CwC प्रॉपर्टी उपलब्ध कराता है. इसकी मदद से, अनुरोध के लिए लाइन के साइज़ की सीमा बढ़ाई जा सकती है. ज़्यादा जानकारी के लिए, यह देखें मैसेज प्रोसेसर पर अनुरोध के लिए लाइन की सीमा सेट करना

सीमाएं

Apigee को उम्मीद है कि क्लाइंट ऐप्लिकेशन और बैकएंड सर्वर, अनुरोध/रिस्पॉन्स हेडर ऐसे नहीं भेजेगा जिनके साइज़, Apigee Edge की सीमा में, अनुरोध/रिस्पॉन्स हेडर के साइज़ की सीमा के लिए दर्ज की गई सीमा से ज़्यादा हैं.

  1. अगर आप पब्लिक क्लाउड का इस्तेमाल करने वाले उपयोगकर्ता हैं, तो अनुरोध और रिस्पॉन्स हेडर के साइज़ के लिए तय की गई ज़्यादा से ज़्यादा सीमा, Apigee Edge की सीमा में, अनुरोध/रिस्पॉन्स हेडर के साइज़ के हिसाब से तय की गई है.
  2. अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो हो सकता है कि आपने अनुरोध और रिस्पॉन्स हेडर के साइज़ के लिए, डिफ़ॉल्ट तौर पर तय सीमा में बदलाव किया हो. भले ही, यह सुझाया गया तरीका न हो. मौजूदा सीमा कैसे देखें में दिए गए निर्देशों का पालन करके, अनुरोध के हेडर के लिए साइज़ की ज़्यादा से ज़्यादा सीमा तय की जा सकती है.

मौजूदा सीमा कैसे देखें?

इस सेक्शन में, इस बात की पुष्टि करने का तरीका बताया गया है कि मैसेज प्रोसेसर पर नई वैल्यू के साथ HTTPRequest.headers.limit प्रॉपर्टी को अपडेट किया गया है या नहीं.

  1. Message प्रोसेसर मशीन पर, /opt/apigee/edge-message-processor/conf डायरेक्ट्री में HTTPRequest.headers.limit प्रॉपर्टी खोजें और देखें कि कौनसा वैल्यू सेट की गई है, जैसा कि नीचे दिखाया गया है:
    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. ऊपर दिए गए आउटपुट आउटपुट में, ध्यान दें कि HTTPRequest.headers.limit प्रॉपर्टी को http.properties में, 25k वैल्यू के साथ सेट किया गया है.

    इससे पता चलता है कि Apigee for Private Cloud में, अनुरोध के हेडर के साइज़ की सीमा 25 केबी है.

खास जानकारी

Apigee Edge चाहता है कि क्लाइंट ऐप्लिकेशन, अनुरोध के हिस्से के तौर पर बड़े साइज़ के हेडर न भेजे. अगर अनुरोध में ऐसे हेडर शामिल हैं जिनका कुल साइज़ तय सीमा से ज़्यादा है, तो Apigee, आरएफ़सी के इन निर्देशों के मुताबिक 431 Request Header Fields Too Large देता है:

खास जानकारी
आरएफ़सी 6585, सेक्शन 5: 431 अनुरोध के हेडर के फ़ील्ड बहुत बड़े हैं

अगर आपको अब भी Apigee की सहायता टीम से मदद चाहिए, तो गड़बड़ी की जानकारी इकट्ठा करना ज़रूरी है पर जाएं.

ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करनी होगी

ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी यह जानकारी इकट्ठा करें और Apigee Edge की सहायता टीम से संपर्क करें:

अगर आप Public Cloud उपयोगकर्ता हैं, तो यह जानकारी दें:

  • संगठन का नाम
  • परिवेश का नाम
  • एपीआई प्रॉक्सी का नाम
  • 431 गड़बड़ी को फिर से दिखाने के लिए, पूरे curl निर्देश का इस्तेमाल किया गया
  • एपीआई अनुरोधों के लिए ट्रेस फ़ाइल

अगर आप प्राइवेट क्लाउड उपयोगकर्ता हैं, तो यह जानकारी दें:

  • असफल अनुरोधों के लिए देखा गया पूरा गड़बड़ी का मैसेज
  • संगठन का नाम
  • परिवेश का नाम
  • एपीआई प्रॉक्सी बंडल
  • काम न करने वाले एपीआई अनुरोधों के लिए ट्रेस फ़ाइल
  • 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