Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
İstemci uygulaması, API çağrılarına yanıt olarak messaging.adaptors.http.flow.DecompressionFailureAtResponse
hata koduyla birlikte 502 Bad Gateway
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ğıdakine 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:
Content-Encoding
HTTP yanıtında (arka uç/hedef sunucudan) belirtilen kodlama geçerlidir ve Apigee Edge tarafından desteklenmektedir.- Arka uç/hedef sunucu tarafından HTTP yanıtının parçası olarak gönderilen yük biçimi,
Content-Encoding
üstbilgisinde belirtilen kodlama biçimiyle eşleşmiyor.
ANCAK
Bunun nedeni, yükün biçimi Content-Encoding
başlığında belirtilen kodlamayla aynı biçimde olmadığı için Apigee Edge'in belirtilen kodlamayı kullanarak yükü çözememesidir.
Aşağıda, desteklenen Content-Encoding
değerlere ve Apigee Edge'in bu durumlarda yük gösteriminin 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 sayfasını inceleyin. |
Tek Kodlama | söndürme | Bu biçim, sıkıştırma sıkıştırması algoritmasıyla |
Birden Çok Kodlama | Birden Çok Kodlama Örneğin, kodlama iki kez yapıldığında şu olabilir:
|
Başlıkta göründüğü sırada yüke birden fazla kodlama uygulanır. |
Bu hatanın olası nedenleri şunlardır:
Neden | Açıklama | Şunun 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 başlığında belirtilen kodlamayla eşleşmiyordur. |
Edge Herkese Açık ve Özel Bulut kullanıcıları |
Yaygın teşhis adımları
Bu hatayı teşhis etmek için aşağıdaki araçlardan/tekniklerden birini kullanın:
API Monitoring
API Monitoring'i kullanarak hatayı teşhis etmek için:
- Uygun role sahip bir kullanıcı olarak Apigee Edge kullanıcı arayüzünde oturum açın.
Sorunu incelemek istediğiniz kuruluşa geçin.
- Analiz > API İzleme > Araştır sayfasına gidin.
- Hataları gözlemlediğiniz belirli zaman aralığını seçin.
- Proxy filtresinin Tümü olarak ayarlandığından emin olun.
- Hata Kodu'nu Zamana göre çizin.
Aşağıda gösterildiği gibi
messaging.adaptors.http.flow.DecompressionFailureAtResponse
hata koduna sahip bir hücre seçin:messaging.adaptors.http.flow.DecompressionFailureAtResponse
hata kodu ile ilgili bilgi aşağıda gösterildiği gibi görüntülenir:Günlükleri görüntüle'yi tıklayın ve
502
hatasıyla başarısız olan satırı genişletin.- Günlükler penceresinde aşağıdaki ayrıntıları dikkate alın:
- Durum Kodu:
502
- Hata Kaynağı:
target
- Hata Kodu:
messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
- Durum Kodu:
- Hata Kaynağı
target
değerine sahipse bu durum, yanıt yükü biçiminin arka uç sunucusunun yanıt başlığında belirtilen desteklenen kodlama ile eşleşmediğini gösterir (Content-Encoding
).
İzleme aracı
Hatayı İzle aracını kullanarak teşhis etmek için:
- İzleme oturumunu etkinleştirin ve aşağıdakilerden birini yapın:
502 Bad Gateway
hatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısı yapın ve
502 Bad Gateway
işlemini yeniden oluşturun.
Tüm FlowInfo'ları göster seçeneğinin etkin olduğundan emin olun:
- Başarısız yanıtlardan birini seçip izi inceleyin.
- İzin farklı aşamaları arasında gezinin ve hatanın nerede gerçekleştiğini bulun.
Hatayı genellikle aşağıda gösterildiği gibi Hedef sunucudan alınan yanıt aşamasından hemen sonraki bir akışta bulursunuz:
-
İzdeki özelliklerin değerlerini not edin:
- İçerik Kodlaması:
gzip
- Yanıt İçeriği Gövdesi:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- İçerik Kodlaması:
Hedef sunucudan yanıt alındı aşamasından hemen sonra hata aşamasına gidin:
Özelliklere dikkat edin:
- hata:
Decompression failure at response
- error.class:
com.apigee.errors.http.server.BadGateway
error.cause:
Not in GZIP format
error.cause, yanıt yükünün GZIP biçiminde olmadığını belirtir. Bu, Apigee Edge'in yanıt yükünün
Content-Encoding
başlığında belirtildiği gibi (önceki adımda belirlenmiş) GZIP biçiminde olmasını beklediği anlamına gelir. Bu nedenle Apigee Edge, gzip kullanarak yükü açamaz veDecompression failure at response
hatasını döndürür.
Bu durumda hedef/arka uç sunucusundan alınan yanıtın
200
olduğunu unutmayın. Ancak hata Apigee Edge tarafından döndürüldüğünden istemci uygulaması,502
yanıtı alır.- hata:
İzdeki Müşteriye Gönderilen Yanıt aşamasına gidin ve bunu tıklayın.
İzdeki 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:
İzdeki AX (Analytics Verileri Kaydedilen) aşamasına gidin ve bunu tıklayın.
- Aşama Ayrıntıları ve Hata Başlıkları bölümüne ilerleyin ve X-Apigee-fault-code ile X-Apigee-fault-source değerlerini aşağıda gösterildiği gibi belirleyin:
- X-Apigee-fault-code ve X-Apigee-fault-source değerlerini
messaging.adaptors.http.flow.DecompressionFailureAtResponse
vetarget
olarak görürsünüz. Bu durum, yanıt yükü biçimininContent-Encoding
baş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.DecompressionFailureAtResponse
X-Apigee-fault-source target
NGINX
NGINX erişim günlüklerini kullanarak hatayı teşhis etmek için:
- Private Cloud kullanıcısıysanız HTTP
502
hatalarıyla ilgili önemli 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_log
Yer: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Belirli bir süre boyunca herhangi bir
502
hatası olup olmadığını (sorun geçmişte gerçekleştiyse) veya502
hatasıyla ilgili hâlâ başarısız olan yanıtlar olup olmadığını görmek için arama yapın. X-Apigee-fault-code ile
messaging.adaptors.http.flow.DecompressionFailureAtResponse
değeriyle eşleşen bir502
hatası bulursanız X-Apigee-fault-source değerini belirleyin.NGINX erişim günlüğünden örnek 502 hatası:
NGINX erişim günlüğünden yukarıdaki örnek giriş, X-Apigee-fault-code ve X-Apigee-fault-code için aşağıdaki değerlere sahiptir:
Yanıt başlıkları Değer X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
X-Apigee-fault-source target
Neden: Yanıt yükü biçimi Content-Encoding ile eşleşmiyor
Yanıt başlığı Content-Encoding
hem geçerli hem de
desteklenen bir kodlama içeriyorsa Apigee Edge varsayılan olarak yükü her zaman açar. Bu nedenle, yanıt yükünün biçiminin Content-Encoding
yanıt başlığında belirtilen kodlamayla eşleşmesi beklenir.
Uyuşmazlık varsa bu hatayı alırsınız.
Teşhis
- API Monitoring, İzleme aracı veya NGINX erişim günlüklerini kullanarak gözlemlenen hata için Yaygın teşhis adımları bölümünde açıklandığı şekilde Hata Kodu ve Hata Kaynağı'nı belirleyin.
- Hata Kodu
messaging.adaptors.http.flow.DecompressionFailureAtResponse
ve Hata Kaynağıtarget
değerine sahipse bu durum, arka uç/hedef sunucu tarafından gönderilen yanıt yükünün biçimininContent-Encoding
yanıt başlığında belirtilen desteklenen kodlama ile eşleşmediğini gösterir. Uyuşmazlığı, aşağıdaki yöntemlerden birini kullanarak HTTP yanıtının bir parçası olarak 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
faultstring
dokümanına bakın.Örnek hata mesajı:
"faultstring":"Decompression failure at response"
- Yukarıdaki hata mesajında,
Content-Encoding
başlığında belirtilen kodlama kullanılarak yanıtın sıkıştırılamadığı anlamına gelen"Decompression failure at response"
görüntüleniyor.
Trace
Trace kullanarak doğrulamak için:
- Yaygın teşhis adımlarında açıklandığı şekilde, Trace kullanarak Content-Type ve error.cause değerlerini belirleyin.
Örnek izdeki değerler aşağıdaki gibidir:
- İçerik Kodlaması:
gzip
- error.cause:
Not in GZIP format
Yanıt başlığındaki Content-Encoding değeri, gzip şeklindedir ancak yanıt yükü GZIP biçiminde değildir (error.cause ile gösterilir). Bu nedenle Apigee Edge,
502 Bad Gateway
vemessaging.adaptors.http.flow.DecompressionFailureAtResponse
hata koduyla yanıt verir.- İçerik Kodlaması:
Gerçek istek
Gerçek isteği kullanarak doğrulamak için:
Hedef/arka uç sunucusu uygulamasına yapılan gerçek isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
- Herkese Açık Bulut/Private Cloud kullanıcısıysanız arka uç sunucusuna istek yapmanıza izin verilen başka bir makineden veya arka uç sunucunun kendisinden doğrudan arka uç sunucuya istek gönderin.
- Private Cloud kullanıcısıysanız Mesaj İşleyicilerinin birinden arka uç sunucusuna da istek gönderebilirsiniz.
- Arka uç sunucusu tarafından gönderilen yanıtı inceleyin ve
Content-Encoding.
yanıt başlığında iletilen değeri belirleyin - İsteğin bir parçası olarak gönderilen yükün biçimini belirleyin.
Content-Encoding
üst bilgisinin değeri desteklenen kodlama listesindeyse ancak yanıt yükünün biçimiContent-Encoding
başlığında belirtilen kodlamayla eşleşmiyorsa sorunun nedeni budur.Ö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,
gzip
değerini Apigee Edge'de desteklenen bir kodlama olanContent-Encoding
başlığına gönderir. Ancak,response_payload.zip
zip dosyası olarak gönderilir. Bu nedenle, bu yanıt şu hata kodunu içeren bir502 Bad Gateway
hatasıyla başarısız olur:messaging.adaptors.http.flow.DecompressionFailureAtResponse
.
Mesaj İşleyici günlükleri
İleti İşleyici günlüklerini kullanarak doğrulamak için:
Private Cloud kullanıcısıysanız HTTP
502
hatalarıyla ilgili önemli bilgileri belirlemek için Mesaj İşleyici günlüklerini kullanabilirsiniz.İleti İşleyici günlüğünü kontrol edin:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Belirli bir süre boyunca
502
hatası olup olmadığını (sorun geçmişte olduysa) veya502
hatasıyla ilgili hâlâ başarısız olan yanıt olup olmadığını görmek için arama yapın. Aşağıdaki arama dizesini kullanabilirsiniz:grep -ri "ZipException"
system.log'da aşağıdakine benzer satırlar bulacaksınız:
1. Senaryo
1. Senaryo: API yanıtı Content-Encoding: gzip başlığına sahip 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 format
occurred 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ındaki
java.util.zip.ZipException: Not in GZIP format
satırı,Content-Encoding
değerinin gzip olarak belirtilmesine rağmen yanıt yükünün GZIP biçiminde gönderilmediğini belirtir. Bu nedenle Apigee Edge bu durumu ortadan kaldırır ve istemci uygulamalarınamessaging.adaptors.http.flow.DecompressionFailureAtResponse
hata koduna sahip bir502
durum kodu döndürür.2. Senaryo
2. Senaryo: API yanıtında Content-Encoding: deflate başlığı 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ındaki
java.util.zip.ZipException: incorrect header check
veCaused by: java.util.zip.DataFormatException: incorrect header check
satırları, yanıt yükünün deflate biçiminde gönderilmediğini ve deflate'inContent-Encoding
başlığında belirtilen kodlamayla eşleşmediğini gösterir. Bu nedenle Apigee Edge bu durumu bir kenara koyar ve istemci uygulamalarınamessaging.adaptors.http.flow.DecompressionFailureAtResponse
hata koduna sahip502
durum kodu döndürür.
-
Çözünürlük
- Apigee Edge'deki ve arka uç sunucusundaki API proxy akışında sıkıştırılmış yanıt yüküne gerek yoksa
Content-Encoding
başlığını iletin. Yanıt yükünü sıkıştırmanız gerekiyorsa 2. adıma gidin. - Yanıt yükünün sıkıştırılması gerekiyorsa arka uç sunucusunun her zaman aşağıdaki bilgileri gönderdiğinden emin olun:
- Yanıttaki
Content-Encoding
üst bilgisi değeri olarak desteklenen kodlamalardan herhangi biri - Apigee Edge'e desteklenen biçimdeki yanıt yükü,
Content-Encoding
başlığında belirtilen kodlama biçimiyle eşleşir.
- Yanıttaki
- Yukarıda açıklanan örnekte, yanıt yükü ZIP biçimindedir ancak yanıt başlığı
Content-Encoding: gzip
değerini belirtir. Yanıt başlığınıContent-Encoding: gzip
ve yanıt yükünügzip
biç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 özelliklerine göre messaging.adaptors.http.flow.DecompressionFailureAtResponse
hata koduyla 502 Bad Gateway
durum koduyla yanıt verir:
Spesifikasyon |
---|
RFC 7231, bölüm 6.5.1 |
RFC 7231, bölüm 3.1.2.2 |
Apigee Desteği'nden hâlâ yardıma ihtiyacınız varsa Teşhis bilgilerini toplamalısınız başlıklı makaleyi inceleyin.
Teşhis bilgileri toplanmalı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 adı
502
hatasını yeniden oluşturmak için kullanılancurl
komutunu tamamlayın- 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 yanıtlar için gözlemlenen tam hata mesajı
- 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_log
Yer: 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