Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 502 Bad Gateway dengan kode error
messaging.adaptors.http.flow.DecompressionFailureAtResponse sebagai respons terhadap panggilan
API.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 502 Bad Gateway
Selain itu, Anda mungkin melihat pesan error yang mirip dengan yang ditunjukkan di bawah ini:
{
"fault":{
"faultstring":"Decompression failure at response",
"detail":{
"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"
}
}
}Kemungkinan penyebab
Error ini hanya terjadi jika:
- Encoding yang ditentukan dalam header respons HTTP (dari server backend/target)
Content-Encodingvalid dan didukung oleh Apigee Edge, - Format payload yang dikirim oleh server backend/target sebagai bagian dari respons HTTP
tidak
cocok dengan format encoding yang ditentukan di header
Content-Encoding
TETAPI
Hal ini karena Apigee Edge gagal mendekode payload menggunakan encoding yang ditentukan karena
format payload tidak sama dengan format encoding yang ditentukan di header
Content-Encoding.
Berikut beberapa contoh nilai Content-Encoding yang didukung dan cara Apigee Edge
mengharapkan representasi payload dalam kasus tersebut:
| Skenario | Content-Encoding | Representasi payload |
|---|---|---|
| Encoding Tunggal | gzip | Format Lihat RFC1952 GZIP Format. |
| Encoding Tunggal | mengempiskan | Format ini menggunakan struktur |
| Encoding Ganda | Encoding Ganda Misalnya, dalam kasus ketika encoding dilakukan dua kali, hasilnya dapat berupa:
|
Beberapa encoding diterapkan ke payload dalam urutan tertentu seperti yang muncul di header. |
Kemungkinan penyebab error ini adalah sebagai berikut:
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Format payload respons tidak cocok dengan Content-Encoding | Format payload respons yang dikirim oleh server backend/target tidak dienkode atau tidak cocok dengan encoding yang ditentukan di header Content-Encoding. |
Pengguna Edge Public dan Private Cloud |
Langkah-langkah diagnosis umum
Gunakan salah satu alat/teknik berikut untuk mendiagnosis error ini:
Pemantauan API
Untuk mendiagnosis error menggunakan Pemantauan API:
- Login ke UI Apigee Edge sebagai pengguna dengan peran yang sesuai.
Beralih ke organisasi tempat Anda ingin menyelidiki masalah.
- Buka halaman Analyze > API Monitoring > Investigate.
- Pilih jangka waktu tertentu saat Anda mengamati error.
- Pastikan filter Proxy disetel ke Semua.
- Petakan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
messaging.adaptors.http.flow.DecompressionFailureAtResponseseperti yang ditunjukkan di bawah:( lihat gambar yang lebih besar)
Informasi tentang kode kesalahan
messaging.adaptors.http.flow.DecompressionFailureAtResponseditampilkan seperti yang ditunjukkan di bawah:( lihat gambar yang lebih besar)
Klik Lihat log dan luaskan baris yang gagal dengan error
502.( lihat gambar yang lebih besar)
- Dari jendela Logs, catat detail berikut:
- Kode Status:
502 - Sumber Kesalahan:
target - Kode Kesalahan:
messaging.adaptors.http.flow.DecompressionFailureAtResponse.
- Kode Status:
- Jika Fault Source memiliki nilai
target, maka hal itu menunjukkan bahwa format payload respons tidak cocok dengan encoding yang didukung yang ditentukan di header respons server backendContent-Encoding.
Alat rekaman aktivitas
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan sesi rekaman aktivitas
dan salah satu dari:
- Tunggu hingga terjadi error
502 Bad Gateway, atau - Jika Anda dapat mereproduksi masalah, lakukan panggilan API dan reproduksi
502 Bad Gateway.
- Tunggu hingga terjadi error
Pastikan Show all FlowInfos diaktifkan:
- Pilih salah satu respons yang gagal dan periksa rekaman aktivitas.
- Telusuri berbagai fase rekaman aktivitas dan temukan tempat terjadinya kegagalan.
Biasanya Anda akan menemukan error dalam alur tepat setelah fase Respons Diterima dari server target seperti yang ditunjukkan di bawah:
( lihat gambar yang lebih besar)
-
Perhatikan nilai properti dari rekaman aktivitas:
- Content-Encoding:
gzip - Isi Konten Respons:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Content-Encoding:
Buka fase error tepat setelah fase Response Received from target server:
( lihat gambar yang lebih besar)
Perhatikan properti:
- error:
Decompression failure at response - error.class:
com.apigee.errors.http.server.BadGateway error.cause:
Not in GZIP formaterror.cause menyatakan bahwa payload respons Tidak dalam format GZIP. Artinya, Apigee Edge mengharapkan payload respons dalam format GZIP seperti yang ditentukan di header
Content-Encoding(ditentukan pada langkah sebelumnya).Oleh karena itu, Apigee Edge tidak dapat mendekompresi payload menggunakan gzip dan menampilkan errorDecompression failure at response.
Perhatikan bahwa respons dari server target/backend adalah
200dalam kasus ini; namun, aplikasi klien akan menerima respons502karena error ditampilkan oleh Apigee Edge.- error:
Buka fase Response Sent to Client di rekaman aktivitas dan klik.
( lihat gambar yang lebih besar)
Perhatikan detail berikut dari rekaman aktivitas:
- Kode status:
502 Bad Gateway. - Konten Error:
{"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
- Kode status:
Buka fase AX (Data Analytics Direkam) dalam rekaman aktivitas lalu klik.
- Scroll ke bawah ke bagian Phase Details, Error Headers, dan
tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source
seperti yang ditunjukkan di bawah:
( lihat gambar yang lebih besar)
- Anda akan melihat nilai X-Apigee-fault-code dan X-Apigee-fault-source
sebagai
messaging.adaptors.http.flow.DecompressionFailureAtResponsedantarget, yang menunjukkan bahwa format payload respons tidak cocok dengan encoding yang ditentukan di headerContent-Encoding.Header respons Nilai X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponseX-Apigee-fault-source target
NGINX
Untuk mendiagnosis error menggunakan log akses NGINX:
- Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk
menentukan informasi utama tentang error HTTP
502. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logKeterangan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Cari untuk melihat apakah ada error
502selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada respons yang masih gagal dengan502. Jika Anda menemukan error
502dengan X-Apigee-fault-code yang cocok dengan nilaimessaging.adaptors.http.flow.DecompressionFailureAtResponse, tentukan nilai X-Apigee-fault-source.Contoh error 502 dari log akses NGINX:
Entri contoh di atas dari log akses NGINX memiliki nilai berikut untuk X-Apigee-fault-code dan X-Apigee-fault-source:
Header respons Nilai X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponseX-Apigee-fault-source target
Penyebab: Format payload respons tidak cocok dengan Content-Encoding
Secara default, Apigee Edge selalu mendekompresi payload jika header respons
Content-Encoding berisi encoding yang valid dan
didukung. Oleh karena itu, format payload respons
harus cocok dengan encoding yang ditentukan di header respons Content-Encoding.
Jika ada ketidakcocokan, Anda akan mendapatkan error ini.
Diagnosis
- Tentukan Kode Kesalahan dan Sumber Kesalahan untuk error yang diamati menggunakan Pemantauan API, alat Trace, atau log akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
- Jika Fault Code adalah
messaging.adaptors.http.flow.DecompressionFailureAtResponsedan Fault Source memiliki nilaitarget, maka hal ini menunjukkan bahwa format payload respons yang dikirim oleh server backend/target tidak cocok dengan encoding yang didukung yang ditentukan di header responsContent-Encoding. Anda dapat menentukan ketidakcocokan sebagai bagian dari respons HTTP menggunakan salah satu metode berikut:
Pesan error
Untuk memvalidasi menggunakan pesan error:
-
Jika Anda memiliki akses ke pesan error lengkap yang diterima dari Apigee Edge, maka lihat
faultstring.Contoh pesan error:
"faultstring":"Decompression failure at response"
- Dalam pesan error di atas,
"Decompression failure at response"ditampilkan, yang menyiratkan bahwa respons tidak dapat didekompresi menggunakan encoding yang ditentukan di headerContent-Encoding.
Trace
Untuk memvalidasi menggunakan Trace:
- Tentukan Content-Type dan error.cause menggunakan Trace seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
Nilai dari rekaman aktivitas sampel adalah sebagai berikut:
- Content-Encoding:
gzip - error.cause:
Not in GZIP format
Nilai di header respons Content-Encoding adalah gzip; namun, payload respons tidak dalam format GZIP (seperti yang ditunjukkan oleh error.cause). Oleh karena itu, Apigee Edge merespons dengan
502 Bad Gatewaydan kode errormessaging.adaptors.http.flow.DecompressionFailureAtResponse.- Content-Encoding:
Permintaan sebenarnya
Untuk memvalidasi menggunakan permintaan sebenarnya:
Jika Anda memiliki akses ke permintaan sebenarnya yang dibuat ke aplikasi server target/backend, lakukan langkah-langkah berikut:
- Jika Anda adalah pengguna Cloud Publik/Cloud Pribadi, buat permintaan langsung ke server backend dari server backend itu sendiri atau mesin lain tempat Anda diizinkan untuk membuat permintaan ke server backend.
- Jika Anda adalah pengguna Private Cloud, Anda juga dapat membuat permintaan ke server backend dari salah satu Pemroses Pesan.
- Periksa respons yang dikirim oleh server backend dan tentukan nilai
yang diteruskan di header respons
Content-Encoding. - Tentukan format payload yang dikirim sebagai bagian dari permintaan.
- Jika nilai header
Content-Encodingada dalam daftar encoding yang didukung, tetapi format payload respons tidak cocok dengan encoding yang ditentukan dalam headerContent-Encoding, maka itulah penyebab masalahnya.Contoh:
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)>Respons contoh di atas mengirimkan nilai
gzipke headerContent-Encodingyang merupakan encoding yang didukung di Apigee Edge. Namun,response_payload.zipdikirim sebagai file zip. Oleh karena itu, respons ini gagal dengan error502 Bad Gatewaydengan kode error:messaging.adaptors.http.flow.DecompressionFailureAtResponse.
Log Message Processor
Untuk memvalidasi menggunakan log Message Processor:
Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log Message Processor untuk menentukan informasi utama tentang error HTTP
502.Periksa log Message Processor:
/opt/apigee/var/log/edge-message-processor/logs/system.logLakukan penelusuran untuk melihat apakah ada error
502selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada respons yang masih gagal dengan502. Anda dapat menggunakan string penelusuran berikut:grep -ri "ZipException"
Anda akan menemukan baris dari system.log yang mirip dengan berikut ini:
Skenario #1
Skenario #1: Saat respons API memiliki header Content-Encoding: gzip
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 formatBaris
java.util.zip.ZipException: Not in GZIP formatdalam pesan error di atas menunjukkan bahwa payload respons tidak dikirim dalam format GZIP meskipunContent-Encodingditentukan sebagai gzip. Oleh karena itu, Apigee Edge akan memunculkan pengecualian dan menampilkan kode status502dengan kode kesalahanmessaging.adaptors.http.flow.DecompressionFailureAtResponseke aplikasi klien.Skenario #2
Skenario #2: Saat respons API memiliki header Content-Encoding: deflate
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 checkBaris
java.util.zip.ZipException: incorrect header checkdanCaused by: java.util.zip.DataFormatException: incorrect header checkdalam pesan error di atas menunjukkan bahwa payload respons tidak dikirim dalam format deflate dan tidak cocok dengan encoding yang ditentukan di headerContent-Encodingdeflate. Oleh karena itu, Apigee Edge akan memunculkan pengecualian dan menampilkan kode status502dengan kode kesalahanmessaging.adaptors.http.flow.DecompressionFailureAtResponseke aplikasi klien.
-
Resolusi
- Jika tidak ada kebutuhan untuk payload respons yang dikompresi dalam alur proxy API di Apigee Edge
dan di server backend, maka jangan teruskan header
Content-Encoding. Jika ada kebutuhan untuk memadatkan payload respons, lanjutkan ke langkah 2. - Jika ada kebutuhan untuk mengompresi payload respons, pastikan server backend selalu mengirimkan hal berikut:
- Salah satu
encoding yang didukung sebagai nilai untuk header
Content-Encodingdalam respons - Payload respons dalam format yang didukung ke Apigee Edge cocok dengan format
encoding yang ditentukan di header
Content-Encoding
- Salah satu
encoding yang didukung sebagai nilai untuk header
- Dalam contoh yang dibahas di atas, payload respons dalam format ZIP, tetapi header respons
menentukan
Content-Encoding: gzip. Anda dapat memperbaiki masalah ini dengan mengirim header respons sebagaiContent-Encoding: gzipdan payload respons dalam formatgzip: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)>
Spesifikasi
Apigee Edge merespons dengan kode status 502 Bad Gateway dengan kode error
messaging.adaptors.http.flow.DecompressionFailureAtResponse sesuai dengan spesifikasi RFC
berikut:
| Spesifikasi |
|---|
| RFC 7231, bagian 6.5.1 |
| RFC 7231, bagian 3.1.2.2 |
Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Mengumpulkan informasi diagnostik.
Harus mengumpulkan informasi diagnostik
Kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:
Jika Anda adalah pengguna Cloud Publik, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama Proxy API
- Perintah
curllengkap yang digunakan untuk memunculkan kembali error502 - File rekaman aktivitas untuk respons API
Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk respons yang gagal
- Nama lingkungan
- Paket Proxy API
- File rekaman aktivitas untuk respons API
Log akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logTempat: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log