Anda melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 502 Bad Gateway dengan kode error protocol.http.ResponseWithBody sebagai respons untuk panggilan API.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 502 Bad Gateway
Selain itu, Anda mungkin melihat salah satu pesan error berikut:
{
"fault":{
"faultstring":"Received 204 Response with message body",
"detail":{
"errorcode":"protocol.http.ResponseWithBody"
}
}
}{
"fault":{
"faultstring":"Received 205 Response with message body",
"detail":{
"errorcode":"protocol.http.ResponseWithBody"
}
}
}Kemungkinan penyebab
Error ini terjadi jika respons HTTP dari server backend ke Apigee Edge adalah
204 No Content atau 205 Reset Content tetapi berisi isi
respons dan/atau satu atau beberapa header berikut:
Content-LengthContent-EncodingTransfer-Encoding
Sesuai dengan spesifikasi
RFC 7231, bagian 6.3.5: 204 No Content dan
RFC 7231, bagian 6.3.6: 205 Reset Content, tidak ada konten tambahan
yang boleh dikirim sebagai bagian dari isi payload respons dengan kode status 204 No
Content atau 205 Reset Content oleh server asal. Header respons
seperti Content-Length, Content-Encoding atau
Transfer-Encoding menunjukkan ukuran, jenis, atau format payload respons.
Oleh karena itu, Apigee Edge menampilkan kode status 502 Bad Gateway dengan kode error protocol.http.ResponseWithBody ke klien dalam situasi berikut:
| Kode status dari server backend | ||
|---|---|---|
| Respons dari server backend berisi | 204 No Content | 205 Reset Content |
| Isi Respons | ERROR | ERROR |
Header (ditetapkan ke bukan nol) |
ERROR | ERROR |
(ditetapkan ke encoding yang didukung di Apigee Edge) |
ERROR | NO ERROR |
Transfer-Encoding |
ERROR | ERROR |
Berikut kemungkinan penyebab error ini:
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Isi respons atau Header dengan respons 204 dari server backend | Server backend mengirimkan respons 204 No Content atau 205 Reset Content
dengan isi respons dan/atau satu atau beberapa header Content-Type,
Content-Encoding atau Transfer-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.
- Buat diagram Fault Code terhadap Time.
Pilih sel yang memiliki kode kesalahan
protocol.http.ResponseWithBodyseperti ditunjukkan di bawah:( lihat gambar yang lebih besar)
Anda akan melihat informasi tentang kode kesalahan
protocol.http.ResponseWithBodyseperti yang ditunjukkan di bawah:( lihat gambar yang lebih besar)
Klik View logs dan luaskan baris untuk permintaan yang gagal.
( lihat gambar yang lebih besar)
- Dari jendela Logs, catat detail berikut:
- Status Code:
502 - Fault Source:
target - Fault Code:
protocol.http.ResponseWithBody.
- Status Code:
- Jika Fault Source memiliki nilai
targetdan Fault Code memiliki nilaiprotocol.http.ResponseWithBody, hal ini menunjukkan bahwa error terjadi karena server backend mengirimkan kode status204 No Contentatau205 Reset Contentdengan isi respons dan/atau salah satu header yang disebutkan di bagian Kemungkinan penyebab.
Alat pelacakan
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan sesi pelacakan dan:
- Tunggu hingga error
502 Bad Gatewayterjadi. atau - Jika Anda dapat mereproduksi masalah, lakukan panggilan API dan reproduksi
502 Bad Gatewayerror.
- Tunggu hingga error
Pastikan Show all FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa pelacakannya.
- Buka berbagai fase pelacakan dan temukan tempat terjadinya kegagalan terjadi.
Biasanya, Anda akan menemukan error di
flowinfoError tepat setelah fase Request sent to target server seperti yang ditunjukkan di bawah:Skenario #1
Skenario #1: Server Backend merespons dengan kode status
204 No Contentyang berisi isi respons dan/atau salah satu header yang tercantum di Kemungkinan penyebab.
Perhatikan nilai berikut dari pelacakan:
- error:
Received 204 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
Skenario #2
Skenario #2: Server Backend merespons dengan kode status
204 No Contentyang berisi isi respons dan/atau salah satu header yang tercantum di Kemungkinan penyebab.
Perhatikan nilai berikut dari pelacakan:
- error:
Received 205 Response with message body - error.class:
com.apigee.rest.framework.BadGateway
- error:
- Buka fase AX (Data Analytics Tercatat) dalam pelacakan dan 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)
- Perhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source
are protocol.http.ResponseWithBodydantarget. Hal ini menunjukkan bahwa error terjadi karena server backend mengirimkan kode status204 No Contentatau205 Reset Contentdengan isi respons dan/atau salah satu header yang disebutkan di Kemungkinan penyebab.Error Nilai X-Apigee-fault-code protocol.http.ResponseWithBodyX-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 HTTP
502 Bad Gateway. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDengan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Cari untuk melihat apakah ada
502error dengan kode errorprotocol.http.ResponseWithBodyselama durasi tertentu (jika masalah terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan502. Jika Anda menemukan error
502dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.ResponseWithBody, 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 protocol.http.ResponseWithBodyX-Apigee-fault-source target- Perhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source
adalah
protocol.http.ResponseWithBodydantarget. Hal ini menunjukkan bahwa error terjadi karena server backend mengirimkan kode status204 No Contentatau205 Reset Contentdengan isi respons dan/atau salah satu header yang disebutkan di Kemungkinan penyebab.
Penyebab: Isi respons atau Header dengan respons 204 dari server backend
Diagnosis
- Tentukan Fault Code dan Fault Source untuk error yang diamati menggunakan Pemantauan API, alat Trace, atau log akses NGINX seperti yang dijelaskan di Langkah-langkah diagnosis umum.
- Jika Fault Code adalah
protocol.http.ResponseWithBodydan Fault Source memiliki nilaitarget, hal ini menunjukkan bahwa server backend telah merespons dengan kode status204 No Contentatau205 Reset Contentdengan isi respons dan/atau salah satu header yang disebutkan di Kemungkinan penyebab. Untuk memvalidasi apakah server backend memang telah mengirimkan isi payload respons dan/atau satu atau beberapa header yang disebutkan di Kemungkinan penyebab, Anda dapat melakukan langkah-langkah berikut:
Jika Anda adalah pengguna Public Cloud, dan jika Anda dapat membuat permintaan API yang sama ke server backend langsung dari salah satu sistem Anda.
- Jika Anda adalah pengguna Private Cloud, Anda dapat membuat permintaan API yang sama ke server backend langsung dari salah satu Message Processor yang terkait dengan organisasi dan lingkungan tertentu tempat kegagalan diamati.
Tinjau respons yang diterima dari server backend dan pastikan respons tersebut berisi a isi payload respons dan/atau satu atau beberapa header yang disebutkan di atas. Jika ya, itulah penyebab error ini.
Contoh #1
Contoh #1: Respons Server Backend 204 dengan Header Content-Encoding
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveDalam contoh ini, server backend merespons dengan
204 No Contentkode status danContent-Encoding: gzipContoh #2
Contoh #2: Respons Server Backend 204 dengan Header Content-Length
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveDalam contoh ini, server backend merespons dengan
204 No Contentkode status danContent-Length: 48Contoh #3
Contoh #3: Respons Server Backend 205 dengan Isi Respons
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample ResponseDalam contoh ini, server backend merespons dengan
205 Reset Contentkode status dengan isi responsThis is a sample Response.- Dalam semua contoh di atas, server backend mengirimkan
204 No Contentatau205 Reset Contentkode status dengan isi respons dan/atau salah satu header yang disebutkan di Kemungkinan penyebab. - Oleh karena itu, Apigee Edge mengirimkan kode status
502 Bad Gatewaydengan kode errorprotocol.http.ResponseWithBody.
Resolusi
Pastikan server backend selalu mematuhi Spesifikasi
RFC 7231, bagian 6.3.6: 205 Reset Content, saat mengirimkan respons 204 No Content
atau 205 Reset Content ke Apigee Edge. Artinya, server backend
TIDAK BOLEH mengirimkan hal berikut sebagai bagian dari respons 204 No Content atau
205 Reset Content:
- Isi payload respons
- Dan salah satu header berikut:
Content-LengthContent-EncodingTransfer-Encoding
Spesifikasi
Apigee Edge merespons dengan kode status 502 Bad Gateway dan kode error
protocol.http.ResponseWithBody jika server backend mengirimkan respons
204 No Content atau 205 Reset Content, tetapi
tidak mematuhi spesifikasi RFC berikut:
| Spesifikasi |
|---|
| RFC 7231, bagian 6.3.5: 204 No Content |
| RFC 7231, bagian 6.3.6: 205 Reset Content |
Poin penting yang perlu diperhatikan
Solusi yang direkomendasikan adalah memperbaiki server backend untuk mengirimkan kode status 204 No Content
dan 205 Reset Content tanpa isi respons dan header apa pun - Content-Length, Content-Encoding, dan
Transfer-Encoding serta mematuhi spesifikasi
RFC 7231, bagian 6.3.5: 204 No Content dan
RFC 7231, bagian 6.3.6: 205 Reset Content.
Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Mengumpulkan informasi diagnostik yang diperlukan.
Mengumpulkan informasi diagnostik yang diperlukan
Kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:
Jika Anda adalah pengguna Public Cloud, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama API Proxy
- Perintah
curllengkap yang digunakan untuk mereproduksi error502 - File pelacakan untuk permintaan API
Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk permintaan yang gagal
- Nama lingkungan
- Paket API Proxy
- File pelacakan untuk permintaan API
Log akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDengan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log