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

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

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

क्लाइंट ऐप्लिकेशन को एपीआई कॉल के जवाब के तौर पर, 431 Request Header Fields Too Large एचटीटीपी स्टेटस कोड मिलता है. साथ ही, गड़बड़ी का कोड protocol.http.TooBigHeaders मिलता है.

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

क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:

HTTP/1.1 431 Request Header Fields Too Large

इसके अलावा, आपको गड़बड़ी का यह मैसेज भी दिख सकता है:

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

संभावित कारण

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

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

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

गड़बड़ी का पता लगाने के सामान्य चरण

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

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

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

  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. अगर आप Private Cloud के उपयोगकर्ता हैं, तो 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 की वैल्यू से मेल खाने वाली 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 (40 केबी, 25 केबी से ज़्यादा है. Apigee Edge में अनुरोध हेडर के लिए तय की गई सीमा)

    ऊपर दिए गए सैंपल लॉग एंट्री में, X-Apigee-fault-source की वैल्यू apigee या MP है. साथ ही, X-Apigee-fault-code की वैल्यू protocol.http.TooBigHeaders है और Request Length 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 को भेजी जा रही अनुरोध लाइन का साइज़ पता लगाने की कोशिश करें.

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

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

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

रिज़ॉल्यूशन

साइज़ तय करना

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

  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. अगर आप 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. ऊपर दिए गए उदाहरण में, ध्यान दें कि प्रॉपर्टी HTTPRequest.headers.limit को http.properties में 25k वैल्यू के साथ सेट किया गया है.

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

खास जानकारी

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

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

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

डाइग्नोस्टिक जानकारी इकट्ठा करना ज़रूरी है

गड़बड़ी की यह जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें:

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

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

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

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