आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
इस पेज पर जाएं
Apigee X दस्तावेज़. जानकारी
समस्या का ब्यौरा
क्लाइंट ऐप्लिकेशन को गड़बड़ी कोड के साथ 400 Bad Request
का एक एचटीटीपी स्टेटस कोड मिलता है
messaging.adaptors.http.flow.DecompressionFailureAtRequest
एपीआई के रिस्पॉन्स के तौर पर
कॉल.
गड़बड़ी का मैसेज
क्लाइंट ऐप्लिकेशन को यह रिस्पॉन्स कोड मिलता है:
HTTP/1.1 400 Bad Request
इसके अलावा, आपको गड़बड़ी का ऐसा मैसेज भी दिख सकता है जो नीचे दिए गए मैसेज जैसा है:
{ "fault":{ "faultstring":"Decompression failure at request", "detail":{ "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtRequest" } } }
संभावित कारण
यह गड़बड़ी सिर्फ़ तब होती है, जब:
- एचटीटीपी अनुरोध हेडर
Content-Encoding
में बताई गई एन्कोडिंग मान्य है और Apigee Edge पर काम करता है, - एचटीटीपी अनुरोध के हिस्से के रूप में क्लाइंट का भेजा गया पेलोड फ़ॉर्मैट
Content-Encoding
हेडर में दिए गए एन्कोडिंग फ़ॉर्मैट से मेल खाता हो
लेकिन
ऐसा इसलिए होता है, क्योंकि Apigee Edge, तय की गई एन्कोडिंग का इस्तेमाल करके पेलोड को डिकोड नहीं कर पाता है, क्योंकि
पेलोड का फ़ॉर्मैट उसी फ़ॉर्मैट में नहीं है जैसा
Content-Encoding
हेडर.
यहां इस्तेमाल की जा सकने वाली Content-Encoding
वैल्यू के कुछ उदाहरण और Apigee Edge के तरीके के बारे में बताया गया है
उम्मीद है कि ऐसे मामलों में पेलोड फ़ॉर्मैट यही हो:
स्थिति | Content-Encoding | पेलोड का अनुमानित फ़ॉर्मैट |
---|---|---|
एक कोड में बदलने का तरीका | gzip | Unix यहां जाएं: RFC1952 GZIP फ़ॉर्मैट. |
एक कोड में बदलने का तरीका | कम करें | इस फ़ॉर्मैट में, डिफ़्लेट कंप्रेशन एल्गोरिदम के साथ देखें
RFC1950 और
RFC1951 |
एकाधिक एन्कोडिंग | एकाधिक एन्कोडिंग उदाहरण के लिए, जब डेटा को कोड में बदलने के तरीके को दो बार इस्तेमाल किया जाता है, तो:
|
हेडर में दिखने वाले क्रम में पेलोड पर, कोड में बदलने का एक से ज़्यादा तरीका लागू किया गया. |
इस गड़बड़ी की ये वजहें हो सकती हैं:
वजह | ब्यौरा | इसके लिए लागू होने वाले, समस्या हल करने के निर्देश |
---|---|---|
पेलोड फ़ॉर्मैट का अनुरोध करने का फ़ॉर्मैट, कॉन्टेंट को कोड में बदलने के हेडर में बताई गई एन्कोडिंग से मेल नहीं खाता | क्लाइंट ने जिस अनुरोध पेलोड को भेजा है उसका फ़ॉर्मैट कोड में बदला नहीं गया है या उस फ़ॉर्मैट में नहीं है
Content-Encoding हेडर में बताए गए कोड में बदलने के तरीके से मेल खाना चाहिए. |
Edge के सार्वजनिक और प्राइवेट क्लाउड उपयोगकर्ता |
गड़बड़ी की जांच करने के सामान्य तरीके
इस गड़बड़ी का पता लगाने के लिए, इनमें से किसी एक टूल/तकनीक का इस्तेमाल करें:
एपीआई मॉनिटरिंग
एपीआई मॉनिटरिंग का इस्तेमाल करके, गड़बड़ी का पता लगाने के लिए:
- वाले उपयोगकर्ता के तौर पर, Apigee Edge के यूज़र इंटरफ़ेस (यूआई) में साइन इन करें भूमिका होनी चाहिए.
उस संगठन पर जाएं जिसमें आपको समस्या की जांच करनी है.
- विश्लेषण > एपीआई मॉनिटरिंग > पेज की जांच करें.
- वह समयावधि चुनें जिसमें आपको गड़बड़ियां दिखी थीं.
- पक्का करें कि प्रॉक्सी फ़िल्टर सभी पर सेट किया गया हो.
- समय के हिसाब से गड़बड़ी कोड दिखाएं.
वह सेल चुनें जिसमें गड़बड़ी कोड
messaging.adaptors.http.flow.DecompressionFailureAtRequest
है नीचे दिखाया गया है:गड़बड़ी के कोड के बारे में जानकारी
messaging.adaptors.http.flow.DecompressionFailureAtRequest
के बारे में नीचे बताया गया है:लॉग देखें पर क्लिक करें और
400
गड़बड़ी वाली लाइन को बड़ा करें.- लॉग विंडो में जाकर, यह जानकारी देखें:
- स्टेटस कोड:
400
- गलत सोर्स:
proxy
- गलत कोड:
messaging.adaptors.http.flow.DecompressionFailureAtRequest
.
- स्टेटस कोड:
- अगर गलत सोर्स की वैल्यू
proxy
है, तो वह दिखाता है कि अनुरोध पेलोड फ़ॉर्मैट समर्थित एन्कोडिंग बताई गई है, जोContent-Encoding
हेडर में बताई गई है.
ट्रेस करने वाला टूल
ट्रेस टूल का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- ट्रेस सेशन चालू करना
साथ ही:
400 Bad Request
गड़बड़ी आने तक इंतज़ार करें, या- अगर आपको समस्या के बारे में अच्छे से पता है, तो एपीआई कॉल करें और समस्या को हल करें
400 Bad Request
.
पक्का करें कि सभी FlowInfos दिखाएं चालू है:
- पूरे न हो पाने वाले अनुरोधों में से किसी एक को चुनें और ट्रेस की जांच करें.
- ट्रेस के अलग-अलग फ़ेज़ पर नेविगेट करें और गड़बड़ी का पता लगाएं हुआ.
आपको आम तौर पर इसके ठीक बाद फ़्लो में गड़बड़ी मिल जाएगी क्लाइंट से मिलने वाले अनुरोध के चरण की जानकारी नीचे दी गई है:
-
ट्रेस में दी गई प्रॉपर्टी की वैल्यू नोट करें:
- गड़बड़ी:
Decompression failure at request
- error.class:
com.apigee.rest.framework.BadRequestException
- error.cause:
Not in GZIP format
error.cause में बताया गया है कि पेलोड के लिए अनुरोध किया गया डेटा, GZIP फ़ॉर्मैट में नहीं है. इसका मतलब है कि Apigee Edge के लिए अनुरोध पेलोड GZIP फ़ॉर्मैट में होना चाहिए जैसा कि वह
Content-Encoding
हेडर में बताया गया होता. - गड़बड़ी:
अनुरोध के हेडर
Content-Encoding
की वैल्यू तय करें. इसके लिए, क्लाइंट से मिला अनुरोध चरण पर जाएं. इसका तरीका यहां दिखाया गया है:ध्यान दें कि अनुरोध हेडर
Content-Encoding
का मान वाकई में हैgzip
.ऊपर दिया गया सैंपल ट्रेस दिखाता है कि अनुरोध के हेडर में, कोड में बदलने का तरीका बताया गया है
Content-Encoding
gzip
है; हालांकि, अनुरोध पेलोड GZIP फ़ॉर्मैट में नहीं है. इसलिए, Apigee, पेलोड को डीकंप्रेस करने के लिए इसका इस्तेमाल नहीं कर सकता gzip, औरDecompression failure at request
गड़बड़ी दिखाता है.- नेविगेट करके, Apigee Edge से मिले स्टेटस कोड और गड़बड़ी के मैसेज को नोट करें
ट्रेस में जाकर क्लाइंट को भेजा गया जवाब चरण में कार्रवाई करें. जैसा कि नीचे दिखाया गया है:
ट्रेस में दी गई जानकारी का ध्यान रखें:
- स्टेटस कोड:
400 Bad Request
. - गड़बड़ी का कॉन्टेंट:
{"fault":{"faultstring":"Decompression failure at request","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtRequest"}}}
- स्टेटस कोड:
ट्रेस में, AX (Analytics का डेटा रिकॉर्ड किया गया) फ़ेज़ पर जाएं और उस पर क्लिक करें.
- नीचे स्क्रोल करते हुए चरण से जुड़ी जानकारी, गड़बड़ी हेडर सेक्शन पर जाएं और X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू तय करें जैसा कि नीचे दिखाया गया है:
- आपको X-Apigee-fault-code और X-Apigee-fault-source की वैल्यू दिखेंगी
messaging.adaptors.http.flow.DecompressionFailureAtRequest
के तौर पर औरpolicy
से पता चलता है कि अनुरोध पेलोड फ़ॉर्मैटContent-Encoding
हेडर में कोड में बदलने के तरीके के बारे में बताया गया है.रिस्पॉन्स हेडर मान X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtRequest
X-Apigee-fault-source policy
NGINX
NGINX ऐक्सेस लॉग का इस्तेमाल करके गड़बड़ी का पता लगाने के लिए:
- अगर आप निजी Cloud उपयोगकर्ता हैं, तो NGINX ऐक्सेस लॉग का इस्तेमाल इन कामों के लिए किया जा सकता है
एचटीटीपी
400
गड़बड़ियों के बारे में अहम जानकारी तय करते हैं. NGINX ऐक्सेस लॉग देखें:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
कहां: ORG, ENV, और PORT# को असल वैल्यू से बदल दिया जाता है.
- खोज करके देखें कि किसी तय अवधि के दौरान, कोई
400
गड़बड़ी हुई या नहीं (अगर समस्या पहले हुई है) या कोई अनुरोध अब भी पूरा नहीं हो पा रहा है400
. अगर आपको X-Apigee-fault-code के साथ कोई
400
गड़बड़ी मिलती हैmessaging.adaptors.http.flow.DecompressionFailureAtRequest
की वैल्यू का मेल खा रहा है, इसके बाद, X-Apigee-fault-source. की वैल्यू तय करें.NGINX ऐक्सेस लॉग में 400 कोड वाली गड़बड़ी का सैंपल:
NGINX ऐक्सेस लॉग की ऊपर दी गई सैंपल एंट्री में, X-Apigee-fault-code और X-Apigee-fault-source:
रिस्पॉन्स हेडर मान X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtRequest
X-Apigee-fault-source policy
वजह: पेलोड फ़ॉर्मैट का अनुरोध करने का तरीका, बताए गए कोड में बदलने के तरीके से मेल नहीं खाता कॉन्टेंट-एन्कोडिंग हेडर में
अनुरोध हेडर होने पर, डिफ़ॉल्ट रूप से Apigee Edge हमेशा पेलोड को डीकंप्रेस करता है
Content-Encoding
में मान्य और
समर्थित एन्कोडिंग. इसलिए, अनुरोध पेलोड के फ़ॉर्मैट में
अनुरोध के हेडर Content-Encoding
में दी गई एन्कोडिंग से मेल खाना चाहिए.
अगर कुछ मेल नहीं खाता है, तो आपको यह गड़बड़ी दिखती है.
संक्रमण की जांच
- एपीआई का इस्तेमाल करके मिली गड़बड़ी के लिए, गलत कोड और गलत सोर्स का पता लगाएं मॉनिटरिंग, ट्रेस करने वाले टूल या NGINX ऐक्सेस लॉग के बारे में ज़्यादा जानकारी यहां दी गई है गड़बड़ी की जानकारी पाने के सामान्य तरीके.
- अगर गलत कोड
messaging.adaptors.http.flow.DecompressionFailureAtRequest
और गलत सोर्स की वैल्यूpolicy
याproxy
है, फिर यह यह बताता है कि क्लाइंट ऐप्लिकेशन से भेजे गए अनुरोध में पेलोड है, जो समर्थित एन्कोडिंग अनुरोध हेडर में दी गई हैContent-Encoding
. आप इनमें से किसी एक का इस्तेमाल करके, एचटीटीपी अनुरोध के हिस्से के तौर पर मेल न खाने का पता लगा सकते हैं तरीका:
गड़बड़ी का मैसेज
गड़बड़ी के मैसेज का इस्तेमाल करके पुष्टि करने के लिए:
-
अगर आपके पास Apigee Edge से मिले, गड़बड़ी के पूरे मैसेज का ऐक्सेस है, तो
faultstring
देखें.गड़बड़ी के मैसेज का उदाहरण:
"faultstring":"Decompression failure at request"
- ऊपर दिए गए गड़बड़ी के मैसेज में, यह
"Decompression failure at request"
का मतलब है कि अनुरोध में दी गई एन्कोडिंग का इस्तेमाल करके डीकंप्रेस नहीं किया जा सकाContent-Encoding
हेडर.
ट्रेस
ट्रेस का इस्तेमाल करके पुष्टि करने के लिए:
- अनुरोध हेडर Content-Encoding की वैल्यू तय करें और Trace का इस्तेमाल करके, प्रॉपर्टी error.cause जैसा कि डाइग्नोस्टिक्स के सामान्य चरणों में बताया गया है.
सैंपल ट्रेस की वैल्यू इस तरह हैं:
- कॉन्टेंट को कोड में बदलने का तरीका:
gzip
- error.cause:
Not in GZIP format
अनुरोध के हेडर Content-कोडिंग में मौजूद वैल्यू gzip है; हालांकि, अनुरोध पेलोड GZIP फ़ॉर्मैट में नहीं है (जैसा कि error.cause से बताया गया है). इसलिए, Apigee Edge इस मैसेज से जवाब देता है
400 Bad Request
और गड़बड़ी का कोडmessaging.adaptors.http.flow.DecompressionFailureAtRequest
.- कॉन्टेंट को कोड में बदलने का तरीका:
असल अनुरोध
असल अनुरोध का इस्तेमाल करके पुष्टि करने के लिए:
अगर आपके पास क्लाइंट के किए गए असल अनुरोध का ऐक्सेस है तो नीचे दिए गए चरणों को पूरा करें:
- अनुरोध हेडर
Content-Encoding
को दी गई वैल्यू तय करें. - अनुरोध के हिस्से के रूप में भेजे गए पेलोड का फ़ॉर्मैट तय करें.
अगर
Content-Encoding
हेडर का मान इस्तेमाल करने वाला कोड में बदलने का तरीका लेकिन अनुरोध पेलोड का फ़ॉर्मैट ऐसा नहीं करताContent-Encoding
हेडर में बताई गई एन्कोडिंग के साथ मिलान करें, तो यह समस्या की वजह है.अनुरोध का सैंपल:
curl -v "http://HOSTALIAS/v1/testgzip"
-H "Content-Encoding: gzip"
-X POST -d @request_payload.zipऊपर दिया गया सैंपल अनुरोध, वैल्यू
gzip
Content-Encoding
हेडर जो कोड में बदलने का तरीका Apigee Edge में इस्तेमाल किया जा सकता है. हालांकि, अनुरोध पेलोडrequest_payload.zip
, ZIP फ़ॉर्मैट में है. इसलिए, इस अनुरोध में400 Bad Request
स्थिति कोड और गड़बड़ी कोड के साथ काम नहीं करता:messaging.adaptors.http.flow.DecompressionFailureAtRequest
.
मैसेज प्रोसेसर के लॉग
मैसेज प्रोसेसर के लॉग का इस्तेमाल करके पुष्टि करने के लिए:
अगर आप निजी क्लाउड उपयोगकर्ता हैं, तो आपके पास मैसेज प्रोसेसर के लॉग इस्तेमाल करने का विकल्प होता है एचटीटीपी
400
गड़बड़ियों के बारे में अहम जानकारी तय करने के लिए.- एपीआई मॉनिटरिंग, ट्रेस टूल, और पूरे न हो पाने वाले अनुरोध का मैसेज आईडी पता करने के लिए या NGINX ऐक्सेस लॉग जैसा कि गड़बड़ी की जानकारी के सामान्य तरीके में बताया गया है.
मैसेज प्रोसेसर के लॉग में, मैसेज आईडी खोजें:
/opt/apigee/var/log/edge-message-processor/logs/system.log
आपको नीचे दिए गए अपवादों में से कोई एक दिखेगा:
स्थिति #1
स्थिति #1: जब एपीआई अनुरोध में हेडर, कॉन्टेंट की एन्कोडिंग का इस्तेमाल किया जाता है: gzip
2021-07-28 10:21:16,861 NIOThread@0 ERROR HTTP.SERVER - HTTPServer$Context.onInputException() : Message id:rt-57-1 SSLClientChannel[Accepted: Remote:192.168.199.8:8443 Local:192.168.80.234:44284]@28469 useCount=1 bytesRead=0 bytesWritten=28764 age=2739893ms lastIO=0ms isOpen=true.onExceptionRead exception: {} java.util.zip.ZipException: Not in GZIP format 2021-07-28 10:21:16,862 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/test, message Id:rt-57-1, exception:java.util.zip.ZipException: Not in GZIP format, context:Context@71ea5ac input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.199.8:8443 Local:192.168.80.234:44284]@28469 useCount=1 bytesRead=0 bytesWritten=28764 age=2739894ms lastIO=0ms isOpen=true) 2021-07-28 10:21:16,862 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception
java.util.zip.ZipException: Not in GZIP format
occurred while writing to channel null 2021-07-28 10:21:16,863 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: Not in GZIP formatऊपर दिए गए गड़बड़ी के मैसेज की लाइन
java.util.zip.ZipException: Not in GZIP format
बताती है कि अनुरोध पेलोड GZIP फ़ॉर्मैट में नहीं भेजा जाता है, हालांकिContent-Encoding
gzip के रूप में दर्ज है. इसलिए, Apigee Edge किसी अपवाद की जानकारी देता है और गड़बड़ी कोड के साथ400
स्थिति कोड लौटाता हैmessaging.adaptors.http.flow.DecompressionFailureAtRequest
क्लाइंट ऐप्लिकेशन में बदलना है.स्थिति #2
स्थिति #2: जब एपीआई अनुरोध में हेडर, कॉन्टेंट-एन्कोडिंग: deflate हो, तो
2021-07-28 15:26:31,893 NIOThread@1 ERROR HTTP.SERVER - HTTPServer$Context.onInputException() : Message id:rt-47875-1 SSLClientChannel[Accepted: Remote:192.168.199.8:8443 Local:192.168.81.72:45954]@29276 useCount=1 bytesRead=0 bytesWritten=37230 age=3498856ms lastIO=1ms isOpen=true.onExceptionRead exception: {}
java.util.zip.ZipException: incorrect header check
….Caused by: java.util.zip.DataFormatException: incorrect header check
.. 2021-07-28 15:26:31,894 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/test, message Id:rrt-47875-1, exception:java.util.zip.ZipException: incorrect header check, context:Context@69b3ac45 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.199.8:8443 Local:192.168.81.72:45954]@29276 useCount=1 byt esRead=0 bytesWritten=37230 age=3498856ms lastIO=1ms isOpen=true)रेखाएं
java.util.zip.ZipException: incorrect header check
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है औरCaused by: java.util.zip.DataFormatException: incorrect header check
ऊपर दिए गए गड़बड़ी के मैसेज में बताया गया है कि अनुरोध पेलोड नहीं भेजा गया है डिफ़लेट फ़ॉर्मैट में रखता है और डिफ़्लेट काContent-Encoding
हेडर. इसलिए, Apigee Edge अपवाद की जानकारी देता है और इसके साथ400
स्थिति कोड दिखाता है गड़बड़ी का कोडmessaging.adaptors.http.flow.DecompressionFailureAtRequest
क्लाइंट ऐप्लिकेशन में बदलना है.
-
रिज़ॉल्यूशन
- अगर Apigee Edge के एपीआई प्रॉक्सी फ़्लो में, कंप्रेस किए गए अनुरोध पेलोड की ज़रूरत नहीं है
और बैकएंड सर्वर में, तो हेडर
Content-Encoding
पास न करें. अगर अनुरोध पेलोड को कंप्रेस करने की ज़रूरत है, तो दूसरे चरण पर जाएं. - पक्का करें कि क्लाइंट ऐप्लिकेशन हमेशा ये जानकारी भेजता हो:
- इनमें से कोई भी
इसमें
Content-Encoding
हेडर की वैल्यू के तौर पर का इस्तेमाल किया जा सकता है अनुरोध - Apigee Edge के साथ काम करने वाले फ़ॉर्मैट में पेलोड का अनुरोध, कोड में बदलने के तरीके से मेल खाता है
Content-Encoding
हेडर में फ़ॉर्मैट बताया गया है
- इनमें से कोई भी
इसमें
- ऊपर बताए गए उदाहरण में, अनुरोध पेलोड ZIP फ़ॉर्मैट में है, लेकिन अनुरोध हेडर
Content-Encoding: gzip
तय करता है. अनुरोध भेजकर समस्या हल की जा सकती हैContent-Encoding: gzip
के तौर पर हेडर औरgzip
में अनुरोध पेलोड भी प्रारूप:curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
खास जानकारी
Apigee Edge, गड़बड़ी के कोड के साथ स्टेटस कोड 400 Bad Request
के साथ जवाब देता है
इस आरएफ़सी के मुताबिक messaging.adaptors.http.flow.DecompressionFailureAtRequest
विशेषताएं:
खास जानकारी |
---|
आरएफ़सी 7231, सेक्शन 6.5.1 |
आरएफ़सी 7231, सेक्शन 3.1.2.2 |
अगर आपको अब भी Apigee की सहायता टीम से कोई मदद चाहिए, तो ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करना ज़रूरी है.
ऐप्लिकेशन की परफ़ॉर्मेंस से जुड़ी जानकारी इकट्ठा करना ज़रूरी है
गड़बड़ी की नीचे दी गई जानकारी इकट्ठा करें. इसके बाद, Apigee Edge की सहायता टीम से संपर्क करें:
अगर आप सार्वजनिक क्लाउड के उपयोगकर्ता हैं, तो यह जानकारी दें:
- संगठन का नाम
- परिवेश का नाम
- एपीआई प्रॉक्सी का नाम
400
गड़बड़ी को ठीक करने के लिए इस्तेमाल किए गएcurl
निर्देश को पूरा करें- एपीआई अनुरोधों के लिए फ़ाइल ट्रेस करें
अगर आप निजी Cloud उपयोगकर्ता हैं, तो यह जानकारी दें:
- पूरे न हो पाने वाले अनुरोधों की वजह से, गड़बड़ी का पूरा मैसेज मिला
- परिवेश का नाम
- एपीआई प्रॉक्सी बंडल
- एपीआई अनुरोधों के लिए फ़ाइल ट्रेस करें
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