Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Belirti
İstemci uygulaması 400 Bad Request
HTTP durum kodunu hata koduyla alıyor
API'ye yanıt olarak messaging.adaptors.http.flow.DecompressionFailureAtRequest
çağrısının en iyi yoludur.
Hata mesajı
İstemci uygulaması aşağıdaki yanıt kodunu alır:
HTTP/1.1 400 Bad Request
Ayrıca, aşağıda gösterilene benzer bir hata mesajı da görebilirsiniz:
{ "fault":{ "faultstring":"Decompression failure at request", "detail":{ "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtRequest" } } }
Olası nedenler
Bu hata yalnızca aşağıdaki durumlarda oluşur:
- HTTP istek başlığında belirtilen kodlama
Content-Encoding
ve Apigee Edge tarafından destekleniyor, - İstemci tarafından HTTP isteğinin bir parçası olarak gönderilen yük biçimi
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 biçiminin aşağıdaki durumlarda olmasını bekler:
Senaryo | İçerik-Kodlaması | Beklenen yük biçimi |
---|---|---|
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ı: |
---|---|---|
İstek yükü biçimi, Content-Encoding başlığında belirtilen kodlamayla eşleşmiyor | İstemci tarafından gönderilen istek 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.DecompressionFailureAtRequest
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.DecompressionFailureAtRequest
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
400
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:
400
- Hata Kaynağı:
proxy
- Hata Kodu:
messaging.adaptors.http.flow.DecompressionFailureAtRequest
.
- Durum Kodu:
- Hata Kaynağı
proxy
değerine sahipse bu durum, istek yükü biçiminin desteklenen kodlamaContent-Encoding
üstbilgisinde belirtilir.
İzleme aracı
İzleme aracını kullanarak hatayı teşhis etmek için:
- İzleme oturumunu etkinleştir
ve şunlardan birini yapın:
400 Bad Request
hatasının oluşmasını bekleyin veya- Sorunu yeniden oluşturabiliyorsanız API çağrısını oluşturun ve
400 Bad Request
Show all FlowInfos (Tüm Akış Bilgilerini Göster) seçeneğinin etkin olduğundan emin olun:
- Başarısız isteklerden 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 İstek Müşteriden Alındı aşaması:
( resmi büyüt)
-
İzdeki özelliklerin değerlerini not edin:
- hata:
Decompression failure at request
- error.class:
com.apigee.rest.framework.BadRequestException
- error.cause:
Not in GZIP format
error.cause, istek yükünün GZIP biçiminde OLMADIĞINI belirtir. Bu da Apigee Edge'in istek yükünün GZIP biçiminde olmasını beklediği anlamına geliyordu.
Content-Encoding
başlığında belirtildiği gibi. - hata:
Content-Encoding
istek başlığının değerini belirleyin. Bunun için aşağıda gösterildiği gibi Müşteriden İstek Alındı aşamasına gidin:( resmi büyüt)
Content-Encoding
istek başlığının değerinin gerçektengzip
.Yukarıdaki örnek iz, istek başlığında belirtilen kodlamanın,
Content-Encoding
gzip
; ancak istek yükü GZIP biçiminde değil. Bu nedenle Apigee, gzip olarak kaydeder veDecompression failure at request
hatasını döndürür.- Apigee Edge'in döndürdüğü hata mesajını ve durum kodunu not edin.
aşağıdaki gibi izlemedeki İstemciye Gönderildi aşamasına
( resmi büyüt)
İzdeki aşağıdaki ayrıntıları not edin:
- Durum kodu:
400 Bad Request
. - Hata İçeriği:
{"fault":{"faultstring":"Decompression failure at request","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtRequest"}}}
- 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.DecompressionFailureAtRequest
vepolicy
(istek yük biçimininContent-Encoding
üstbilgisinde belirtilen kodlama.Yanıt başlıkları Değer X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtRequest
X-Apigee-fault-source policy
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
400
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
400
hatası olup olmadığını görmek için arama yapın (sorun geçmişte oluşmuşsa) veya hâlâ başarısız olan bir istek varsa400
X-Apigee-fault-code ile herhangi bir
400
hatası bulursanızmessaging.adaptors.http.flow.DecompressionFailureAtRequest
değeriyle eşleşiyorsa ve X-Apigee-fault-source. değerinin değerini belirleyin.NGINX erişim günlüğünden örnek 400 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.DecompressionFailureAtRequest
X-Apigee-fault-source policy
Neden: İstek yükü biçimi, belirtilen kodlamayla eşleşmiyor Content-Encoding üstbilgisindeki
Varsayılan olarak Apigee Edge, istek başlığı
Content-Encoding
, geçerli ve
desteklenen kodlamayı kullanın. Bu nedenle, istek yükünün biçiminin
Content-Encoding
istek 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 Aşağıdaki bölümde açıklandığı şekilde İzleme, İzleme aracı veya NGINX erişim günlükleri Yaygın teşhis adımları.
- Hata kodu
messaging.adaptors.http.flow.DecompressionFailureAtRequest
ve Hata Kaynağıpolicy
veyaproxy
değerine sahipse bu istemci uygulaması tarafından gönderilen isteğin, desteklenen kodlama istek başlığındaContent-Encoding
belirtilir. HTTP isteğinin bir parçası olarak eşleşmeyi aşağıdakilerden birini kullanarak 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 request"
- Yukarıdaki hata mesajında
"Decompression failure at request"
, isteğinContent-Encoding
başlığı.
Trace
Trace kullanarak doğrulamak için:
- Content-Encoding istek başlığının ve error.cause mülkündeki Trace hizmeti 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 istek başlığındaki değer gzip şeklindedir; ancak, istek yükü GZIP biçiminde değil (error.cause tarafından belirtildiği gibi). Bu nedenle Apigee Edge,
400 Bad Request
ve hata kodumessaging.adaptors.http.flow.DecompressionFailureAtRequest
.- İçerik Kodlaması:
Gerçek istek
Gerçek isteği kullanarak doğrulamak için:
İstemci tarafından gönderilen asıl isteğe erişiminiz varsa aşağıdaki adımları uygulayın:
Content-Encoding
istek başlığına iletilen değeri belirleyin.- İstek kapsamında gönderilen yükün biçimini belirleyin.
Content-Encoding
üstbilgisinin değeri desteklenmemeli, ancak istek yükünün biçimiContent-Encoding
başlığında belirtilen kodlamayla eşleşir, sorunun nedeni budur.Örnek istek:
curl -v "http://HOSTALIAS/v1/testgzip"
-H "Content-Encoding: gzip"
-X POST -d @request_payload.zipYukarıdaki örnek istek,
gzip
değeriniContent-Encoding
üstbilgisi desteklenen kodlamayı kullanıma sunuyoruz. Ancak istek yükürequest_payload.zip
, ZIP biçiminde. Dolayısıyla, bu istek400 Bad Request
durum kodu ve hata koduyla başarısız oluyor:messaging.adaptors.http.flow.DecompressionFailureAtRequest
.
İ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
400
hatalarıyla ilgili önemli bilgileri belirlemek için.- API Monitoring, Trace aracını kullanarak başarısız isteğin mesaj kimliğini belirleyin. Sık kullanılan teşhis adımları bölümünde açıklandığı şekilde NGINX erişim günlükleri.
İleti İşleyen günlüğünde ileti kimliğini arayın:
/opt/apigee/var/log/edge-message-processor/logs/system.log
Aşağıdaki istisnalardan birini görürsünüz:
1. Senaryo
1. Senaryo: API isteği Content-Encoding: gzip başlığına sahip olduğunda
2021-07-28 10:21:16,861 NIOThread@0 ERROR HTTP.SERVER - HTTPServer$Context.onInputException() : Message id:rt-57-1 SSLClientChannel[Accepted: Remote:192.168.199.8:8443 Local:192.168.80.234:44284]@28469 useCount=1 bytesRead=0 bytesWritten=28764 age=2739893ms lastIO=0ms isOpen=true.onExceptionRead exception: {} java.util.zip.ZipException: Not in GZIP format 2021-07-28 10:21:16,862 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/test, message Id:rt-57-1, exception:java.util.zip.ZipException: Not in GZIP format, context:Context@71ea5ac input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.199.8:8443 Local:192.168.80.234:44284]@28469 useCount=1 bytesRead=0 bytesWritten=28764 age=2739894ms lastIO=0ms isOpen=true) 2021-07-28 10:21:16,862 NIOThread@0 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception
java.util.zip.ZipException: Not in GZIP format
occurred while writing to channel null 2021-07-28 10:21:16,863 NIOThread@0 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ı, isteğinContent-Encoding
olsa bile yük GZIP biçiminde gönderilmez. gzip olarak belirtilir. Bu nedenle, Apigee Edge istisnayı hata koduyla birlikte bir400
durum kodu döndürürmessaging.adaptors.http.flow.DecompressionFailureAtRequest
özellikler sunar.2. Senaryo
2. Senaryo: API isteği Content-Encoding: deflate başlığına sahip olduğunda
2021-07-28 15:26:31,893 NIOThread@1 ERROR HTTP.SERVER - HTTPServer$Context.onInputException() : Message id:rt-47875-1 SSLClientChannel[Accepted: Remote:192.168.199.8:8443 Local:192.168.81.72:45954]@29276 useCount=1 bytesRead=0 bytesWritten=37230 age=3498856ms lastIO=1ms isOpen=true.onExceptionRead exception: {}
java.util.zip.ZipException: incorrect header check
….Caused by: java.util.zip.DataFormatException: incorrect header check
.. 2021-07-28 15:26:31,894 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:POST, uri:/test, message Id:rrt-47875-1, exception:java.util.zip.ZipException: incorrect header check, context:Context@69b3ac45 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.199.8:8443 Local:192.168.81.72:45954]@29276 useCount=1 byt esRead=0 bytesWritten=37230 age=3498856ms lastIO=1ms isOpen=true)Çizgiler
java.util.zip.ZipException: incorrect header check
. veCaused by: java.util.zip.DataFormatException: incorrect header check
yukarıdaki hata mesajı, istek 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 bir400
durum kodu döndürür: hata kodumessaging.adaptors.http.flow.DecompressionFailureAtRequest
özellikler sunar.
-
Çözünürlük
- Apigee Edge'deki API proxy akışında sıkıştırılmış istek yüküne gerek kalmıyorsa
arka uç sunucusunda geçirmeyin
Content-Encoding
. İstek yükünü sıkıştırmanız gerekiyorsa 2. adıma gidin. - İstemci uygulamasının her zaman aşağıdakileri gönderdiğinden emin olun:
- Şunlardan herhangi biri:
desteklenen kodlamayı
Content-Encoding
üstbilgisi için istek - Desteklenen biçimde Apigee Edge'e gönderilen istek yükü, kodlamayla eşleşir
Content-Encoding
üstbilgisinde biçim belirtildi
- Şunlardan herhangi biri:
desteklenen kodlamayı
- Yukarıda açıklanan örnekte, istek yükü ZIP biçimindedir ancak istek başlığı
Content-Encoding: gzip
belirtir. İsteği göndererek sorunu düzeltebilirsinizContent-Encoding: gzip
olarak başlığı ve istek yükügzip
içinde de biçim:curl -v "https://HOSTALIAS/v1/testgzip" -H "Content-Encoding: gzip" -X POST -d @request_payload.gz
Spesifikasyon
Apigee Edge, 400 Bad Request
durum koduyla hata mesajı veriyor
Aşağıdaki RFC'ye göre messaging.adaptors.http.flow.DecompressionFailureAtRequest
ö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ı
400
hatasını yeniden oluşturmak için kullanılancurl
komutunu tamamlayın- API istekleri için izleme dosyası
Private Cloud kullanıcısıysanız aşağıdaki bilgileri sağlayın:
- Başarısız istekler için tam hata mesajı gözlemlendi
- Ortam adı
- API Proxy paketi
- API istekleri 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