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 yoludur.
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-Encoding
geç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-Encoding
baş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.DecompressionFailureAtResponse
hata 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.DecompressionFailureAtResponse
aş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
502
hatası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ğı
target
değ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 Gateway
hatası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 format
error.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-Encoding
baş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
200
olduğunu unutmayın case; ancak istemci uygulaması bir502
bu 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.DecompressionFailureAtResponse
vetarget
(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.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 NGINX erişim günlüklerini kullanarak şunları yapabilirsiniz:
HTTP
502
hatalarıyla ilgili önemli bilgileri belirler. NGINX erişim günlüklerini kontrol edin:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Konum: ORG, ENV ve PORT# gerçek değerlerle değiştirilir.
- Belirli bir sürede
502
hatası 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
502
hatası bulursanızmessaging.adaptors.http.flow.DecompressionFailureAtResponse
değ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.DecompressionFailureAtResponse
X-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.DecompressionFailureAtResponse
ve Hata Kaynağıtarget
değ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-Encoding
belirtilir. 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
faultstring
inceleyin.Örnek hata mesajı:
"faultstring":"Decompression failure at response"
- Yukarıdaki hata mesajında
"Decompression failure at response"
: Bu, yanıtınContent-Encoding
baş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 Gateway
ve 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-Encoding
baş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,
gzip
değ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 Gateway
hatası 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
502
hatalarıyla ilgili önemli bilgileri belirlemek için.Mesaj İşleyici günlüğünü kontrol edin:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Belirli bir sırasında
502
hatası olup olmadığını görmek için arama yapın (sorun geçmişte olduysa) veya yanıt verildiyse hâlâ502
ile 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 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ı, yanıtınContent-Encoding
olsa bile yük GZIP biçiminde gönderilmez. gzip olarak belirtilir. Bu nedenle, Apigee Edge istisnayı hata koduyla birlikte bir502
durum 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 check
yukarıdaki hata mesajında, yanıt yükünün kodlamayla eşleşmediğinden emin olun,Content-Encoding
deflate başlığı. Bu nedenle Apigee Edge istisnayı bildirir ve şunu içeren bir502
durum 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-Encoding
baş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: gzip
belirtir. Yanıt göndererek sorunu düzeltebilirsinizContent-Encoding: gzip
olarak başlığı vegzip
iç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ı
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 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_log
Yer: 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