502 Hatalı Ağ Geçidi - DecompressionFailureAtResponse

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,
  • ANCAK

  • 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.

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 gzip biçimi.

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 zlib yapısını kullanır.

Bkz. RFC1950 ve RFC1951.

Çoklu Kodlama

Çoklu Kodlama

Örneğin, kodlama iki kez yapıldığında şöyle olabilir:

  • gzip, deflate
  • gzip, gzip
  • deflate, gzip
  • söndür, söndür
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:

  1. Apigee Edge kullanıcı arayüzünde uygun role sahip olur.
  2. Sorunu incelemek istediğiniz kuruluşa geçin.

  3. Analiz > API İzleme > İnceleme sayfası.
  4. Hataları gözlemlediğiniz zaman aralığını seçin.
  5. Proxy filtresinin Tümü olarak ayarlandığından emin olun.
  6. Zaman ile Hata Kodu'nun grafiğini çizin.
  7. messaging.adaptors.http.flow.DecompressionFailureAtResponse hata koduna sahip bir hücre seçin: aşağıda gösterilmiştir:

    ( resmi büyüt)

  8. Hata koduyla ilgili bilgiler messaging.adaptors.http.flow.DecompressionFailureAtResponse aşağıda gösterildiği gibi görüntülenir:

    ( resmi büyüt)

  9. 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)

  10. 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.
  11. 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 Content-Encoding.

İzleme aracı

İzleme aracını kullanarak hatayı teşhis etmek için:

  1. İzleme oturumunu etkinleştir ve şunlardan birini yapın:
    1. 502 Bad Gateway hatasının oluşmasını bekleyin veya
    2. Sorunu yeniden oluşturabiliyorsanız API çağrısını oluşturun ve 502 Bad Gateway
  2. Show all FlowInfos (Tüm Akış Bilgilerini Göster) seçeneğinin etkin olduğundan emin olun:

  3. Başarısız yanıtlardan birini seçin ve izini inceleyin.
  4. İzlemenin farklı aşamalarından yararlanın ve hatanın nerede olduğunu bulun meydana geldi.
  5. Hatayı genellikle Aşağıda gösterildiği gibi Hedef sunucudan yanıt alındı aşaması:

    ( resmi büyüt)

  6. İ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"}}}
  7. 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 hata Decompression failure at response.

    Hedef/arka uç sunucusundan alınan yanıtın bu öğede 200 olduğunu unutmayın case; ancak istemci uygulaması bir 502 bu hata Apigee Edge tarafından döndürülür.

  8. İ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"}}}
  9. İzlemede AX (Kayıtlı Analytics Verileri) aşamasına gidin ve düğmeyi tıklayın.

  10. 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)

  11. X-Apigee-fault-code ve X-Apigee-fault-source değerlerini görürsünüz. messaging.adaptors.http.flow.DecompressionFailureAtResponse ve target (Yanıt yük biçiminin Content-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:

  1. Private Cloud kullanıcısıysanız NGINX erişim günlüklerini kullanarak şunları yapabilirsiniz: HTTP 502 hatalarıyla ilgili önemli bilgileri belirler.
  2. 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.

  3. Belirli bir sürede 502 hatası olup olmadığını görmek için arama yapın (sorun geçmişte oluşmuşsa) veya 502
  4. X-Apigee-fault-code ile herhangi bir 502 hatası bulursanız messaging.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

  1. 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ı.
  2. 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ığında Content-Encoding belirtilir.
  3. 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:

    1. Apigee Edge'den alınan hata mesajının tamamına erişiminiz varsa faultstring inceleyin.

      Örnek hata mesajı:

      "faultstring":"Decompression failure at response"
      
    2. Yukarıdaki hata mesajında "Decompression failure at response": Bu, yanıtın Content-Encoding başlığı.

    Trace

    Trace kullanarak doğrulamak için:

    1. Content-Type ve error.cause değerlerini belirleyin. Trace'i kullanarak Yaygın teşhis adımları bölümünde açıklandığı gibi.
    2. Ö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 kodu messaging.adaptors.http.flow.DecompressionFailureAtResponse.

    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:

    1. 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.
    2. Private Cloud kullanıcısıysanız da istekte bulunabilirsiniz. arka uç sunucusuna postalayın.
    3. Arka uç sunucusu tarafından gönderilen yanıtı inceleyin ve Content-Encoding. yanıt başlığında başarılı
    4. İstek kapsamında gönderilen yükün biçimini belirleyin.
    5. Content-Encoding üstbilgisinin değeri kodlamayı destekler, ancak yanıt yükünün biçimi Content-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ğerini Content-Encoding üstbilgisi desteklenen kodlamayı kullanıma sunuyoruz. Ancak response_payload.zip, zip dosyası olarak gönderilir. Dolayısıyla, yanıtı, hata koduyla birlikte 502 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.

    1. Mesaj İşleyici günlüğünü kontrol edin:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. 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"
      
    3. 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() : Exception
      java.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 format
      

      Yukarıdaki hata mesajındaki java.util.zip.ZipException: Not in GZIP format satırı, yanıtın Content-Encoding olsa bile yük GZIP biçiminde gönderilmez. gzip olarak belirtilir. Bu nedenle, Apigee Edge istisnayı hata koduyla birlikte bir 502 durum kodu döndürür messaging.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. ve Caused 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 bir 502 durum kodu döndürür: hata kodu messaging.adaptors.http.flow.DecompressionFailureAtResponse özellikler sunar.

Çözünürlük

  1. 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.
  2. 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
  3. 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üzeltebilirsiniz Content-Encoding: gzip olarak başlığı ve gzip 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ılan curl 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