Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Belirti
İstemci uygulaması 502 Bad Gateway HTTP durum kodunu hata koduyla alıyor
API'ye yanıt olarak messaging.adaptors.http.flow.DecompressionFailureAtResponse
çağrısının en iyi yolu.
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ı başlığında belirtilen kodlama (arka uç/hedef sunucudan)
Content-Encodinggeçerli ve Apigee Edge tarafından destekleniyor, - HTTP yanıtının bir parçası olarak arka uç/hedef sunucu tarafından gönderilen yük biçimi
CANNOT TRANSLATE
Content-Encodingbaşlıkta belirtilen kodlama biçimiyle eşleşmelidir.
ANCAK
Bunun nedeni, Apigee Edge'in
yük biçiminin,
Content-Encoding üstbilgisi.
Desteklenen Content-Encoding değerler ve Apigee Edge'in bazı örnekleri
yük temsilinin aşağıdaki durumlarda olmasını bekler:
| Senaryo | İçerik-Kodlaması | Yük temsili |
|---|---|---|
| Tek Kodlama | gzip | Unix Görüntüleyin RFC1952 GZIP Biçimi'ni tıklayın. |
| Tek Kodlama | söndürmek | Bu biçim, sıkıştırma sıkıştırma algoritmasına sahip |
| Çoklu Kodlama | Çoklu Kodlama Örneğin, kodlama iki kez yapıldığında şöyle olabilir:
|
Yüke, başlıkta göründüğü şekilde belirtilen sırada birden fazla kodlama uygulandı. |
Bu hatanın olası nedenleri aşağıda açıklanmıştı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ış veya
Content-Encoding üstbilgisinde belirtilen kodlamayla eşleşmelidir. |
Edge Herkese Açık ve Private Cloud kullanıcıları |
Sık kullanılan 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:
- Apigee Edge kullanıcı arayüzünde uygun role sahip olur.
Sorunu incelemek istediğiniz kuruluşa geçin.
- Analiz > API İzleme > İnceleme sayfası.
- Hataları gözlemlediğiniz zaman aralığını seçin.
- Proxy filtresinin Tümü olarak ayarlandığından emin olun.
- Zaman ile Hata Kodu'nun grafiğini çizin.
messaging.adaptors.http.flow.DecompressionFailureAtResponsehata koduna sahip bir hücre seçin: aşağıda gösterilmiştir:( resmi büyüt)
Hata koduyla ilgili bilgiler
messaging.adaptors.http.flow.DecompressionFailureAtResponseaşağıda gösterildiği gibi görüntülenir:( resmi büyüt)
Günlükleri görüntüle'yi tıklayın ve
502hatasıyla başarısız olan satırı genişletin.( resmi büyüt)
- Günlükler penceresinde aşağıdaki ayrıntılara dikkat edin:
- Durum Kodu:
502 - Hata Kaynağı:
target - Hata Kodu:
messaging.adaptors.http.flow.DecompressionFailureAtResponse.
- Durum Kodu:
- Hata Kaynağı
targetdeğerine sahipse bu durum, yanıt yükü biçiminin arka uç sunucusunun yanıt başlığında belirtilen desteklenen kodlamaContent-Encoding.
İzleme aracı
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu etkinleştir
ve şunlardan birini yapın:
502 Bad Gatewayhatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısını oluşturun ve
502 Bad Gateway
Show all FlowInfos (Tüm Akış Bilgilerini Göster) seçeneğinin etkin olduğundan emin olun:
- Başarısız yanıtlardan birini seçin ve izini inceleyin.
- İzlemenin farklı aşamalarından yararlanın ve hatanın nerede olduğunu bulun meydana geldi.
Hatayı genellikle Aşağıda gösterildiği gibi Hedef sunucudan yanıt alındı aşaması:
( resmi büyüt)
-
İ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ı ifadesinden hemen sonraki hata aşamasına geçme aşama:
( resmi büyüt)
Ö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 Değil olduğunu belirtir. Bu da Apigee Edge'in yanıt yükünün GZIP biçiminde olmasını beklediği anlamına geliyordu.
Content-Encodingbaşlığında belirtilmiş (önceki değerde bu nedenle, Apigee Edge gzip kullanarak yükü çıkaramaz ve hataDecompression failure at response.
Hedef/arka uç sunucusundan alınan yanıtın bu öğede
200olduğunu unutmayın case; ancak istemci uygulaması bir502bu hata Apigee Edge tarafından döndürülür.- hata:
İzlemede İstemciye Gönderildi aşamasına gidin ve tıklayın.
( resmi büyüt)
İ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:
İzlemede AX (Kayıtlı Analytics Verileri) aşamasına gidin ve düğmeyi tıklayın.
- Aşama Ayrıntıları, Hata Başlıkları bölümüne gidin ve
X-Apigee-fault-code ve X-Apigee-fault-source değerlerini belirleme
aşağıdaki gibidir:
( resmi büyüt)
- X-Apigee-fault-code ve X-Apigee-fault-source değerlerini görürsünüz.
messaging.adaptors.http.flow.DecompressionFailureAtResponsevetarget(Yanıt yük biçimininContent-Encodingüstbilgisinde belirtilen kodlama.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:
- Private Cloud kullanıcısıysanız NGINX erişim günlüklerini kullanarak şunları yapabilirsiniz:
HTTP
502hatalarıyla ilgili önemli bilgileri belirler. NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logKonum: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Belirli bir sürede
502hatası olup olmadığını görmek için arama yapın (sorun geçmişte oluşmuşsa) veya502 X-Apigee-fault-code ile herhangi bir
502hatası bulursanızmessaging.adaptors.http.flow.DecompressionFailureAtResponsedeğeriyle eşleşiyorsa ve X-Apigee-fault-source. değerinin 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-source:
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, Apigee Edge yanıt başlığı
Content-Encoding, geçerli ve
desteklenen kodlamayı kullanın. Dolayısıyla, yanıt yükünün biçiminin
Content-Encoding yanıt başlığında belirtilen kodlamayla eşleşmelidir.
Uyuşmazlık varsa bu hatayı alırsınız.
Teşhis
- API kullanılarak gözlemlenen hatanın Hata Kodu ve Hata Kaynağı'nı belirleme İzleme, İzleme aracı veya NGINX erişim günlükleri aşağıda açıklandığı gibi Yaygın teşhis adımları.
- Hata kodu
messaging.adaptors.http.flow.DecompressionFailureAtResponseve Hata Kaynağıtargetdeğerine sahipse bu arka uç/hedef sunucu tarafından gönderilen yanıt yükünün biçiminin desteklenen kodlama yanıt başlığındaContent-Encodingbelirtilir. Aşağıdakilerden birini kullanarak HTTP yanıtının bir parçası olarak uyumsuzluğu belirleyebilirsiniz yöntemleri:
Hata mesajı
Hata mesajını kullanarak doğrulamak için:
-
Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa
faultstringinceleyin.Örnek hata mesajı:
"faultstring":"Decompression failure at response"
- Yukarıdaki hata mesajında
"Decompression failure at response": Bu, yanıtınContent-Encodingbaşlığı.
Trace
Trace kullanarak doğrulamak için:
- Content-Type ve error.cause değerlerini belirleyin. Trace'i kullanarak Yaygın teşhis adımları bölümünde açıklandığı gibi.
Örnek izdeki değerler aşağıdaki gibidir:
- İçerik Kodlaması:
gzip - error.cause:
Not in GZIP format
Content-Encoding yanıt başlığındaki değer gzip şeklindedir; ancak yanıt yükü GZIP biçiminde değil (error.cause tarafından belirtildiği gibi). Bu nedenle Apigee Edge,
502 Bad Gatewayve hata kodumessaging.adaptors.http.flow.DecompressionFailureAtResponse.- İçerik Kodlaması:
Gerçek istek
Gerçek isteği kullanarak doğrulamak için:
Hedef/arka uç sunucuya gönderilen 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 istekte bulunun veya başka bir sunucudan doğrudan arka uç sunucusuna arka uç sunucuya istek yapmanıza izin verilen makineyi seçin.
- Private Cloud kullanıcısıysanız da istekte bulunabilirsiniz. arka uç sunucusuna postalayın.
- Arka uç sunucusu tarafından gönderilen yanıtı inceleyin ve
Content-Encoding.yanıt başlığında başarılı - İstek kapsamında gönderilen yükün biçimini belirleyin.
Content-Encodingüstbilgisinin değeri kodlamayı destekler, ancak yanıt yükünün biçimiContent-Encodingbaşlığında belirtilen kodlamayla eşleşmediğinde, 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,
gzipdeğeriniContent-Encodingüstbilgisi desteklenen kodlamayı kullanıma sunuyoruz. Ancakresponse_payload.zip, zip dosyası olarak gönderilir. Dolayısıyla, yanıtı, hata koduyla birlikte502 Bad Gatewayhatası vererek başarısız oluyor:messaging.adaptors.http.flow.DecompressionFailureAtResponse.
İleti işleyen günlükleri
İleti İşleyici günlüklerini kullanarak doğrulamak için:
Private Cloud kullanıcısıysanız Mesaj İşleyici günlüklerini kullanabilirsiniz HTTP
502hatalarıyla ilgili önemli bilgileri belirlemek için.Mesaj İşleyici günlüğünü kontrol edin:
/opt/apigee/var/log/edge-message-processor/logs/system.logBelirli bir sırasında
502hatası olup olmadığını görmek için arama yapın (sorun geçmişte olduysa) veya yanıt verildiyse hâlâ502ile başarısız oluyor. Aşağıdaki arama dizesini kullanabilirsiniz:grep -ri "ZipException"
system.log adresinde şuna 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 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ındaki
java.util.zip.ZipException: Not in GZIP formatsatırı, yanıtınContent-Encodingolsa bile yük GZIP biçiminde gönderilmez. gzip olarak belirtilir. Bu nedenle, Apigee Edge istisnayı hata koduyla birlikte bir502durum kodu döndürürmessaging.adaptors.http.flow.DecompressionFailureAtResponseözellikler sunar.2. Senaryo
2. Senaryo: API yanıtı Content-Encoding: deflate 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 checkÇizgiler
java.util.zip.ZipException: incorrect header check. veCaused by: java.util.zip.DataFormatException: incorrect header checkyukarıdaki hata mesajında, yanıt yükünün kodlamayla eşleşmediğinden emin olun,Content-Encodingdeflate başlığı. Bu nedenle Apigee Edge istisnayı bildirir ve şunu içeren bir502durum kodu döndürür: hata kodumessaging.adaptors.http.flow.DecompressionFailureAtResponseözellikler sunar.
-
Çözünürlük
- Apigee Edge'deki API proxy akışında sıkıştırılmış yanıt yüküne ihtiyaç duymuyorsanız
arka uç sunucusunda geçirmeyin
Content-Encoding. Yanıt yükünü sıkıştırmak gerekirse 2. adıma gidin. - Yanıt yükünü sıkıştırmak gerekiyorsa arka uç sunucusunun
her zaman şunları gönderir:
- Şunlardan herhangi biri:
desteklenen kodlamayı
Content-Encodingüstbilgisi için yanıt - Apigee Edge'e desteklenen biçimdeki yanıt yükü kodlamayla eşleşir
Content-Encodingbaşlığında belirtilen biçim
- Şunlardan herhangi biri:
desteklenen kodlamayı
- Yukarıda açıklanan örnekte, yanıt yükü ZIP biçiminde, ancak yanıt başlığı
Content-Encoding: gzipbelirtir. Yanıt göndererek sorunu düzeltebilirsinizContent-Encoding: gzipolarak başlığı vegzipiçinde yanıt yükü biçim: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, 502 Bad Gateway durum koduyla hata mesajı veriyor
Aşağıdaki RFC'ye göre messaging.adaptors.http.flow.DecompressionFailureAtResponse
özellikler:
| Spesifikasyon |
|---|
| RFC 7231, bölüm 6.5.1 |
| RFC 7231, bölüm 3.1.2.2 |
Hâlâ Apigee Destek Ekibi'nden yardım almak istiyorsanız adresine gidin. Teşhis bilgileri toplanmalıdır.
Teşhis bilgileri toplanmalıdır
Aşağıdaki teşhis bilgilerini toplayın, ardından Apigee Edge Destek Ekibi ile iletişime geçin:
Herkese açık Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Kuruluş adı
- Ortam adı
- API Proxy adı
502hatasını yeniden oluşturmak için kullanılancurlkomutunu 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 tam hata mesajı gözlemlendi
- 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_logYer: ORG, ENV ve PORT# şununla değiştirilir: gerçek değerler.
- Mesaj İşleyici sistem günlükleri
/opt/apigee/var/log/edge-message-processor/logs/system.log