Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak 502 Bad Gateway hata koduyla birlikte messaging.adaptors.http.flow.DecompressionFailureAtResponse HTTP durum kodunu alır.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 502 Bad Gateway
Ayrıca, aşağıda gösterilene benzer bir hata mesajı da görebilirsiniz:
{
"fault":{
"faultstring":"Decompression failure at response",
"detail":{
"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"
}
}
}Olası nedenler
Bu hata yalnızca aşağıdaki durumlarda oluşur:
- HTTP yanıtı (arka uç/hedef sunucudan) başlığında belirtilen kodlama
Content-Encodinggeçerlidir ve Apigee Edge tarafından desteklenir. - Arka uç/hedef sunucu tarafından HTTP yanıtının bir parçası olarak gönderilen yük biçimi,
Content-Encodingbaşlığında belirtilen kodlama biçimiyle eşleşmiyor.
BUT
Bunun nedeni, yükün biçimi Content-Encoding üstbilgisinde belirtilen kodlamayla aynı biçimde olmadığından Apigee Edge'in yükü belirtilen kodlamayı kullanarak çözememesidir.
Aşağıda, desteklenen Content-Encoding değerlerine ve Apigee Edge'in bu durumlarda yük temsilinin nasıl olmasını beklediğine dair birkaç örnek verilmiştir:
| Senaryo | İçerik-Kodlaması | Yük gösterimi |
|---|---|---|
| Tek Kodlama | gzip | Unix RFC1952 GZIP Biçimi'ni inceleyin. |
| Tek Kodlama | sıkıştırma | Bu biçimde, deflate sıkıştırma algoritmasıyla |
| Birden fazla kodlama | Birden fazla kodlama Örneğin, kodlamanın iki kez yapıldığı durumlarda bu hata şöyle görünebilir:
|
Üstbilgide göründüğü sırayla yük için birden fazla kodlama uygulanır. |
Bu hatanın olası nedenleri şunlardır:
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| Yanıt yükü biçimi, Content-Encoding ile eşleşmiyor | Arka uç/hedef sunucu tarafından gönderilen yanıt yükünün biçimi kodlanmamıştır veya Content-Encoding üstbilgisinde belirtilen kodlamayla eşleşmemektedir. |
Edge Public ve Private Cloud kullanıcıları |
Sık karşılaşılan teşhis adımları
Bu hatayı teşhis etmek için aşağıdaki araçlardan/tekniklerden birini kullanın:
API Monitoring
API İzleme'yi kullanarak hatayı teşhis etmek için:
- Apigee Edge kullanıcı arayüzünde oturum açın. Uygun bir role sahip bir kullanıcı olarak oturum açın.
Sorunu incelemek istediğiniz kuruluşa geçin.
- Analyze > API Monitoring > Investigate (Analiz > API İzleme > İnceleme) sayfasına gidin.
- Hataları gözlemlediğiniz belirli zaman aralığını seçin.
- Proxy filtresinin Tümü olarak ayarlandığından emin olun.
- Hata Kodunu Zaman ile karşılaştırın.
Aşağıda gösterildiği gibi, hata kodu
messaging.adaptors.http.flow.DecompressionFailureAtResponseolan bir hücre seçin:
Hata kodu
messaging.adaptors.http.flow.DecompressionFailureAtResponseile ilgili bilgiler aşağıda gösterildiği gibi görüntülenir:
Günlükleri göster'i tıklayın ve
502hatasıyla başarısız olan satırı genişletin.
- Günlükler penceresinde aşağıdaki ayrıntıları not edin:
- Durum Kodu:
502 - Hata Kaynağı:
target - Hata Kodu:
messaging.adaptors.http.flow.DecompressionFailureAtResponse.
- Durum Kodu:
- Hata Kaynağı
targetdeğerine sahipse bu, yanıt yükü biçiminin arka uç sunucusunun yanıt başlığında belirtilen desteklenen kodlamayla eşleşmediğini gösterirContent-Encoding.
İzleme aracı
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu ve aşağıdakilerden birini etkinleştirin:
502 Bad Gatewayhatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısını yapın ve sorunu yeniden oluşturun
502 Bad Gateway.
Tüm FlowInfo'ları göster'in etkinleştirildiğinden emin olun:
- Başarısız olan yanıtlardan birini seçip izlemeyi inceleyin.
- İzlemenin farklı aşamalarında gezinin ve hatanın nerede oluştuğunu bulun.
Hatayı genellikle aşağıdaki örnekte gösterildiği gibi Hedef sunucudan yanıt alındı aşamasından hemen sonraki akışta görürsünüz:
-
İzdeki özelliklerin değerlerini not edin:
- Content-Encoding:
gzip - Yanıt İçeriği Metni:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Content-Encoding:
Response Received from target server (Hedef sunucudan yanıt alındı) aşamasından hemen sonraki hata aşamasına gidin:
Özellikleri not edin:
- hata:
Decompression failure at response - error.class:
com.apigee.errors.http.server.BadGateway error.cause:
Not in GZIP formaterror.cause, yanıt yükünün GZIP biçiminde olmadığını belirtiyor. Bu, Apigee Edge'in yanıt yükünün
Content-Encodingüstbilgisinde (önceki adımda belirlenmiştir) belirtildiği gibi GZIP biçiminde olmasını beklediği anlamına gelir. Bu nedenle, Apigee Edge yükü gzip kullanarak sıkıştırmayı açamaz veDecompression failure at responsehatasını döndürür.
Bu durumda hedef/arka uç sunucusundan gelen yanıtın
200olduğunu unutmayın. Ancak hata Apigee Edge tarafından döndürüldüğünden istemci uygulaması502yanıtı alır.- hata:
İzleme işleminde Response Sent to Client (İstemciye Yanıt Gönderildi) aşamasına gidin ve bu aşamayı tıklayın.
İzlemeyle ilgili aşağıdaki ayrıntıları not edin:
- Durum kodu:
502 Bad Gateway. - Hata İçeriği:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Durum kodu:
İzleme işleminde AX (Analytics Verileri Kaydedildi) aşamasına gidin ve bu aşamayı tıklayın.
- Aşağı kaydırarak Aşama Ayrıntıları, Hata Başlıkları bölümüne gidin ve aşağıdaki gibi X-Apigee-fault-code ve X-Apigee-fault-source değerlerini belirleyin:
- X-Apigee-fault-code ve X-Apigee-fault-source değerlerini
messaging.adaptors.http.flow.DecompressionFailureAtResponsevetargetolarak görürsünüz. Bu, yanıt yükü biçimininContent-Encodingbaşlığında belirtilen kodlamayla eşleşmediğini gösterir.Yanıt başlıkları Değer X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponseX-Apigee-fault-source target
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Özel bulut kullanıcısıysanız HTTP
502hatalarıyla ilgili temel bilgileri belirlemek için NGINX erişim günlüklerini kullanabilirsiniz. NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logNerede: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Belirli bir süre içinde
502hatası olup olmadığını (sorun geçmişte yaşandıysa) veya502ile hâlâ başarısız olan yanıtlar olup olmadığını görmek için arama yapın. 502hataları bulursanız ve X-Apigee-fault-code,messaging.adaptors.http.flow.DecompressionFailureAtResponsedeğeriyle eşleşiyorsa X-Apigee-fault-source değerini belirleyin.NGINX erişim günlüğünden örnek 502 hatası:
NGINX erişim günlüğündeki yukarıdaki örnek girişte, X-Apigee-fault-code ve X-Apigee-fault-source için aşağıdaki değerler yer almaktadır:
Yanıt başlıkları Değer X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponseX-Apigee-fault-source target
Neden: Yanıt yükü biçimi, Content-Encoding ile eşleşmiyor
Varsayılan olarak, yanıt başlığı Content-Encoding geçerli ve
desteklenen bir kodlama içeriyorsa Apigee Edge, yükü her zaman sıkıştırır. Bu nedenle, yanıt yükünün biçiminin, yanıt başlığında Content-Encoding belirtilen kodlamayla eşleşmesi beklenir.
Bir uyuşmazlık varsa bu hatayı alırsınız.
Teşhis
- Genel teşhis adımlarında açıklandığı gibi API izleme, izleme aracı veya NGINX erişim günlükleri kullanılarak gözlemlenen hatanın Hata Kodunu ve Hata Kaynağını belirleyin.
- Hata Kodu
messaging.adaptors.http.flow.DecompressionFailureAtResponseise ve Hata Kaynağıtargetdeğerine sahipse bu, arka uç/hedef sunucu tarafından gönderilen yanıt yükünün biçiminin, yanıt başlığındaContent-Encodingbelirtilen desteklenen kodlamayla eşleşmediğini gösterir. Aşağıdaki yöntemlerden birini kullanarak HTTP yanıtının bir parçası olarak uyuşmazlığı belirleyebilirsiniz:
Hata mesajı
Hata mesajını kullanarak doğrulamak için:
-
Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa
faultstringbölümüne bakın.Örnek hata mesajı:
"faultstring":"Decompression failure at response"
- Yukarıdaki hata mesajında,
"Decompression failure at response"gösteriliyor. Bu, yanıtın,Content-Encodingbaşlığında belirtilen kodlama kullanılarak sıkıştırılamadığı anlamına geliyor.
Trace
Trace'i kullanarak doğrulamak için:
- Content-Type ve error.cause değerlerini Yaygın teşhis adımları bölümünde açıklandığı gibi Trace kullanarak belirleyin.
Örnek izlemedeki değerler şunlardır:
- Content-Encoding:
gzip - error.cause:
Not in GZIP format
Yanıt başlığındaki Content-Encoding değeri gzip; ancak yanıt yükü GZIP biçiminde değil (error.cause ile belirtildiği gibi). Bu nedenle, Apigee Edge
502 Bad Gatewayve hata kodumessaging.adaptors.http.flow.DecompressionFailureAtResponseile yanıt verir.- Content-Encoding:
Gerçek istek
Gerçek isteği kullanarak doğrulamak için:
Hedef/arka uç sunucu uygulamasına yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- Herkese açık bulut/özel bulut kullanıcısıysanız, arka uç sunucusundan veya arka uç sunucusuna istekte bulunmanıza izin verilen başka bir makineden doğrudan arka uç sunucusuna istekte bulunun.
- Özel bulut kullanıcısıysanız isteği Mesaj İşleyicilerden birinden arka uç sunucusuna da gönderebilirsiniz.
- Arka uç sunucusu tarafından gönderilen yanıtı inceleyin ve yanıt başlığında
Content-Encoding.ile iletilen değeri belirleyin. - İsteğin bir parçası olarak gönderilen yükün biçimini belirleyin.
Content-Encodingbaşlığının değeri, desteklenen kodlama listesinde yer alıyorsa ancak yanıt yükünün biçimiContent-Encodingbaşlığında belirtilen kodlamayla eşleşmiyorsa sorun bundan kaynaklanıyordur.Örnek:
curl -v https://HOSTALIAS/test
***trimmed*** > < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Content-Encoding: gzip< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.zip Response Body(not in GZIP format)>Yukarıdaki örnek yanıt,
gzipdeğerini Apigee Edge'de desteklenen bir kodlama olanContent-Encodingüst bilgisine gönderir. Ancak,response_payload.zipzip dosyası olarak gönderilir. Bu nedenle, bu yanıt502 Bad Gatewayhatasıyla vemessaging.adaptors.http.flow.DecompressionFailureAtResponsehata koduyla başarısız oluyor.
Mesaj işleyici günlükleri
Mesaj İşleyici günlüklerini kullanarak doğrulamak için:
Özel bulut kullanıcısıysanız HTTP
502hatalarıyla ilgili temel bilgileri belirlemek için Mesaj İşleyici günlüklerini kullanabilirsiniz.Mesaj İşleyici günlüğünü kontrol edin:
/opt/apigee/var/log/edge-message-processor/logs/system.logBelirli bir süre içinde (sorun geçmişte yaşandıysa)
502hatası olup olmadığını veya502ile hâlâ başarısız olan yanıtlar olup olmadığını görmek için arama yapın. Aşağıdaki arama dizesini kullanabilirsiniz:grep -ri "ZipException"
system.log dosyasında aşağıdakine benzer satırlar görürsünüz:
1. senaryo
1. senaryo: API yanıtında Content-Encoding: gzip başlığı olduğunda
2021-08-02 06:50:25,433 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:10.0.115.32:41298]@38140 useCount=1 bytesRead=0 bytesWritten=203 age=469ms lastIO=0ms isOpen=true).onExceptionRead exception: {}java.util.zip.ZipException: Not in GZIP format---trimmed-- 2021-08-02 06:50:25,433 NIOThread@2 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:50:25,434 NIOThread@2 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@4806fdab, Not in GZIP format) 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exceptionjava.util.zip.ZipException: Not in GZIP formatoccurred while writing to channel null 2021-08-02 06:50:25,434 NIOThread@2 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: Not in GZIP formatYukarıdaki hata mesajında
java.util.zip.ZipException: Not in GZIP formatsatırı,Content-Encodinggzip olarak belirtilmesine rağmen yanıt yükünün GZIP biçiminde gönderilmediğini gösterir. Bu nedenle, Apigee Edge istisna oluşturur ve istemci uygulamalarına502durum koduyla birliktemessaging.adaptors.http.flow.DecompressionFailureAtResponsehata kodunu döndürür.2. senaryo
2. senaryo: API yanıtında Content-Encoding: deflate üstbilgisi olduğunda
2021-08-02 06:35:21,215 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onInputException() : ClientInputChannel(ClientChannel[Connected: Remote:3.8.1.1:9000 Local:192.168.194.140:35224]@36014 useCount=1 bytesRead=0 bytesWritten=202 age=439ms lastIO=2ms isOpen=true).onExceptionRead exception: {}java.util.zip.ZipException: incorrect header check---trimmed---- Caused by:java.util.zip.DataFormatException: incorrect header check---trimmed--- 2021-08-02 06:35:21,215 NIOThread@0 INFO HTTP.CLIENT - HTTPClient$Context.logContextDetails() : Request details : host=null path=/folder/testFile method=GET. Channel details : Bytes read=0 2021-08-02 06:35:21,216 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@3966e277, incorrect header check) 2021-08-02 06:35:21,216 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.util.zip.ZipException: incorrect header check occurred while writing to channel null 2021-08-02 06:35:21,217 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception trace: java.util.zip.ZipException: incorrect header checkYukarıdaki hata mesajında yer alan
java.util.zip.ZipException: incorrect header checkveCaused by: java.util.zip.DataFormatException: incorrect header checksatırları, yanıt yükünün deflate biçiminde gönderilmediğini ve deflate'inContent-Encodingbaşlığında belirtilen kodlamayla eşleşmediğini gösterir. Bu nedenle, Apigee Edge istisna oluşturur ve istemci uygulamalarına502durum koduyla birliktemessaging.adaptors.http.flow.DecompressionFailureAtResponsehata kodunu döndürür.
-
Çözünürlük
- Apigee Edge'deki API proxy akışında ve arka uç sunucusunda sıkıştırılmış yanıt yüküne gerek yoksa
Content-Encodingüst bilgisini geçirmeyin. Yanıt yükünün sıkıştırılması gerekiyorsa 2. adıma gidin. - Yanıt yükünün sıkıştırılması gerekiyorsa arka uç sunucusunun her zaman aşağıdakileri gönderdiğinden emin olun:
- Yanıtın
Content-Encodingüst bilgisinin değeri olarak desteklenen kodlamalardan herhangi biri - Apigee Edge'e gönderilen, desteklenen biçimdeki yanıt yükü,
Content-Encodingüstbilgisinde belirtilen kodlama biçimiyle eşleşir.
- Yanıtın
- Yukarıda bahsedilen örnekte, yanıt yükü ZIP biçimindedir ancak yanıt başlığı
Content-Encoding: gzipolarak belirtilir. Yanıt üstbilgisiniContent-Encoding: gzip, yanıt yükünü isegzipbiçiminde göndererek sorunu düzeltebilirsiniz:curl -v https://HOSTALIAS/v1/test
> < HTTP/1.1 200 OK < Accept-Ranges: bytes <
Content-Encoding: gzip< Date: Mon, 02 Aug 2021 08:17:35 GMT < Transfer-Encoding: chunked < < response_payload.gz Response Body(in GZIP format)>
Spesifikasyon
Apigee Edge, aşağıdaki RFC spesifikasyonlarına göre 502 Bad Gateway durum koduyla ve messaging.adaptors.http.flow.DecompressionFailureAtResponse hata koduyla yanıt verir:
| Spesifikasyon |
|---|
| RFC 7231, bölüm 6.5.1 |
| RFC 7231, bölüm 3.1.2.2 |
Apigee Destek Ekibi'nden hâlâ yardıma ihtiyacınız varsa Teşhis bilgilerini toplama başlıklı makaleyi inceleyin.
Teşhis bilgilerini toplamalıdır
Aşağıdaki teşhis bilgilerini toplayın ve ardından Apigee Edge Destek Ekibi ile iletişime geçin:
Herkese açık bulut kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Kuruluş adı
- Ortam adı
- API proxy'si adı
502hatasını yeniden oluşturmak için kullanılancurlkomutunun tamamı- API yanıtları için izleme dosyası
Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Başarısız olan yanıtlarda gözlemlenen hata mesajının tamamı
- Ortam adı
- API proxy paketi
- API yanıtları için izleme dosyası
NGINX erişim günlükleri
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logNerede: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log