आपको 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-Encodinggzipहै; हालांकि, अनुरोध पेलोड 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.DecompressionFailureAtRequestX-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.DecompressionFailureAtRequestX-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ऊपर दिया गया सैंपल अनुरोध, वैल्यू
gzipContent-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() : Exceptionjava.util.zip.ZipException: Not in GZIP formatoccurred 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-Encodinggzip के रूप में दर्ज है. इसलिए, 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