414 अनुरोध-यूआरआई बहुत लंबा है - TOBigLine

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

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

क्लाइंट ऐप्लिकेशन को 414 Request-URI Too Long का एचटीटीपी स्टेटस कोड मिलता है: एपीआई कॉल के रिस्पॉन्स के तौर पर, गड़बड़ी कोड protocol.http.TooBigLine का इस्तेमाल करना.

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

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

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 (7 केबी) है.

संभावित कारण

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

इस गड़बड़ी की संभावित वजहों का पता लगाने से पहले, आइए जानें कि रिक्वेस्ट लाइन क्या है इसका मतलब है और इसके साइज़ की जांच करने का तरीका भी बताया गया है.

रिक्वेस्ट-लाइन को समझना

आम तौर पर, एचटीटीपी अनुरोध के तीन हिस्से होते हैं:

  1. अनुरोध-लाइन
  2. ( HTTP हेडर का सेट )
  3. [ मुख्य भाग ]

अनुरोध पंक्ति के तीन हिस्से होते हैं, जैसा कि नीचे दिखाया गया है.

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

जब क्लाइंट ऐप्लिकेशन द्वारा सर्वर से एक HTTP अनुरोध किया जाता है, तो सर्वर में ऊपर बताई गई अनुरोध-लाइन शामिल होती है. इसके बाद, यह चरण शुरू होता है हेडर और बॉडी/पेलोड के लिए अनुरोध करें.

नीचे दिया गया स्क्रीनशॉट, आम तौर पर curl अनुरोध को दिखाता है, यानी अनुरोध (अनुरोध-लाइन के साथ) और जवाब वाले हिस्से के साथ.

अनुरोध-लाइन के साइज़ को समझना

  1. ऊपर बताए गए सैंपल में, अनुरोध की शुरुआती लाइन (पहली लाइन), और यहां इसे अनुरोध-लाइन कहा जाता है:
    GET /test/ HTTP/1.1
    

    अनुरोध-लाइन का साइज़ ~19 bytes है, क्योंकि इसमें यह शामिल है 19 ASCII characters. चूंकि यह के भीतर है Apigee Edge में तय सीमा है, तो अनुरोध को बिना किसी गड़बड़ी के प्रोसेस किया जाता है और आपको सही जवाब मिलता है.

  2. इसी तरह, अगर आप में faultstring ऊपर दिखाया गया गड़बड़ी का मैसेज, इसमें "request line size exceeding 7,168" है. इससे पता चलता है कि क्लाइंट के एचटीटीपी अनुरोध में, रिक्वेस्ट-लाइन की संख्या पार हो गई है 7,168 बाइट.

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

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

गड़बड़ी की जांच करने के सामान्य तरीके

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

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

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

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

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

ट्रेस करने वाला टूल

NGINX

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

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

    NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में, X-Apigee-fault-code और X-Apigee-fault-source:

    रिस्पॉन्स हेडर मान
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source policy

    अनुरोध की अवधि: 7244 (7.244 केबी > तय सीमा) ध्यान से देखें

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

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

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

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

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

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

    गड़बड़ी के मैसेज का उदाहरण:

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

    असल अनुरोध

    असल अनुरोध का इस्तेमाल करके पुष्टि करने के लिए:

    अगर आपके पास क्लाइंट ऐप्लिकेशन के असल अनुरोध का ऐक्सेस है, तो इसके बाद, यह तरीका अपनाएं:

    1. अनुरोध में पास किए गए यूआरआई के साइज़ की पुष्टि करें.
    2. अगर आपको लगता है कि यूआरआई का साइज़ Apigee Edge में अनुमति की सीमा सेट करनी है, तो समस्या की वजह है.

      अनुरोध का सैंपल:

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

      ऊपर दिए गए मामले में, क्वेरी पैरामीटर qparam की वैल्यू फ़ाइल का साइज़ 7 केबी से ज़्यादा हो. इसका मतलब है कि इसमें 7 K से ज़्यादा 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 टेक्स्ट ऊपर दिए गए गड़बड़ी मैसेज से पता चलता है कि अनुरोध यूआरआई का साइज़ 7 केबी से ज़्यादा है. इसलिए, Apigee Edge पर इन गड़बड़ियों का पता चलता है com.apigee.errors.http.user.RequestURITooLong और सामान लौटाने की सुविधा क्लाइंट ऐप्लिकेशन के लिए, गड़बड़ी कोड protocol.http.TooBigline वाला 414 स्टेटस कोड.

रिज़ॉल्यूशन

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

विकल्प #1 [सुझाया गया]: क्लाइंट ऐप्लिकेशन को ठीक करें, ताकि अनुरोध के यूआरआई का साइज़ तय सीमा से ज़्यादा न भेजा जाए

  1. अनुरोध यूआरआई के साइज़ से ज़्यादा साइज़ भेजने के लिए, खास क्लाइंट के भेजे जाने वाले अनुरोध का विश्लेषण करें सीमाओं में बताए गए तरीके के मुताबिक सीमा तय की गई है.
  2. अगर यह ज़रूरी नहीं है, तो अपने क्लाइंट ऐप्लिकेशन में बदलाव करें, ताकि वह अनुरोध यूआरआई भेज सके साइज़, तय सीमा से कम है.

    ऊपर बताए गए उदाहरण में, लंबी क्वेरी पास करके इस समस्या को ठीक किया जा सकता है पैरामीटर को अनुरोध के मुख्य भाग/पेलोड के हिस्से के रूप में पास करने के बजाय अनुरोध का यूआरएल, जैसा कि नीचे दिखाया गया है:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. अगर यह जानना ज़रूरी है और आपको तय सीमा से ज़्यादा यूआरआई भेजना है, तो अगले विकल्प.

CwC

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

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

सीमाएं

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

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

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

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

  1. मैसेज प्रोसेसर मशीन पर, प्रॉपर्टी खोजें HTTPRequest.line.limit /opt/apigee/edge-message-processor/conf डायरेक्ट्री और इसे चुनें नीचे दिखाए गए तरीके से देखें कि कौनसा मान सेट किया गया है:
    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.properties में को 7k मान के साथ सेट किया गया है.

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

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

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

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

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

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

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

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