Anda sedang 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-Length
Content-Encoding
Transfer-Encoding
Sesuai dengan spesifikasi
RFC 7231, bagian 6.3.5: 204 No Content dan
RFC 7231, pasal 6.3.6: 205 Reset Content, diharapkan tidak ada konten tambahan
yang 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 keadaan berikut:
Kode status dari server backend | ||
---|---|---|
Respons dari server backend berisi | 204 Tidak Ada Konten. | 205 Reset Konten |
Isi Respons | ERROR | ERROR |
(disetel ke bukan nol) |
ERROR | ERROR |
(disetel ke encoding yang didukung di Apigee Edge) |
ERROR | TIDAK ADA ERROR |
Transfer-Encoding |
ERROR | ERROR |
Berikut kemungkinan penyebab error ini:
Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
---|---|---|
Isi atau Header respons 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 Publik dan Private Cloud |
Langkah-langkah diagnosis umum
Gunakan salah satu alat/teknik berikut untuk mendiagnosis error ini:
Pemantauan API
Untuk mendiagnosis error menggunakan API Monitoring:
- Login ke UI Apigee Edge sebagai pengguna dengan peran yang sesuai.
Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah.
- Buka halaman Analyze > API Monitoring > Menyelidiki.
- Pilih jangka waktu spesifik saat Anda melihat error.
- Tempatkan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
protocol.http.ResponseWithBody
seperti yang ditunjukkan di bawah ini:Anda akan melihat informasi tentang kode kesalahan
protocol.http.ResponseWithBody
seperti yang ditunjukkan di bawah:Klik Lihat log dan luaskan baris untuk permintaan yang gagal.
- Dari jendela Logs, perhatikan detail berikut:
- Kode Status:
502
- Sumber Kesalahan:
target
- Kode Kesalahan:
protocol.http.ResponseWithBody
.
- Kode Status:
- Jika Sumber Kesalahan memiliki nilai
target
dan Kode Kesalahan memiliki nilaiprotocol.http.ResponseWithBody
, hal tersebut menunjukkan bahwa error terjadi karena server backend mengirim kode status204 No Content
atau205 Reset Content
dengan isi respons dan/atau salah satu header yang disebutkan di bagian Kemungkinan penyebab.
Alat pelacak
Untuk mendiagnosis error menggunakan alat Trace:
- Aktifkan sesi perekaman aktivitas
dan:
- Tunggu hingga error
502 Bad Gateway
terjadi. atau - Jika Anda dapat merekonstruksi masalah, buat panggilan API dan rekonstruksi error
502 Bad Gateway
.
- Tunggu hingga error
Pastikan Show all FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitas.
- Jelajahi berbagai fase rekaman aktivitas dan temukan lokasi terjadinya kegagalan.
Biasanya Anda akan menemukan error dalam Error
flowinfo
tepat setelah fase Permintaan dikirim ke server target seperti yang ditunjukkan di bawah ini:Skenario #1
Skenario #1: Server Backend merespons dengan kode status
204 No Content
yang berisi isi respons dan/atau salah satu header yang tercantum dalam Kemungkinan penyebab.Perhatikan nilai berikut dari rekaman aktivitas:
- 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 Content
yang berisi isi respons dan/atau salah satu header yang tercantum dalam Kemungkinan penyebab.Perhatikan nilai berikut dari rekaman aktivitas:
- error:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
- error:
- Buka fase AX (Data Analytics Dicatat) dalam rekaman aktivitas tersebut, lalu klik.
Scroll ke bawah ke bagian Phase Details, Error Headers, lalu tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source seperti yang ditunjukkan di bawah ini:
- Perhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source,
are protocol.http.ResponseWithBody
, dantarget
. Hal ini menunjukkan bahwa error tersebut terjadi karena server backend mengirim kode status204 No Content
atau205 Reset Content
dengan isi respons dan/atau salah satu header yang disebutkan di Kemungkinan penyebab.Error Nilai X-Apigee-fault-code protocol.http.ResponseWithBody
X-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 kunci tentang HTTP
502 Bad Gateway
. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Tempat: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Telusuri untuk melihat apakah ada error
502
dengan kode errorprotocol.http.ResponseWithBody
selama durasi tertentu (jika masalah terjadi sebelumnya) atau apakah ada permintaan yang masih gagal dengan502
. Jika Anda menemukan error
502
dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.ResponseWithBody
, tentukan nilai X-Apigee-fault-source.Contoh error 502 dari log akses NGINX:
Contoh entri 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.ResponseWithBody
X-Apigee-fault-source target
- Perhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source adalah
protocol.http.ResponseWithBody
dantarget
. Hal ini menunjukkan bahwa error tersebut terjadi karena server backend mengirim kode status204 No Content
atau205 Reset Content
dengan 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 Kode Kesalahan dan Sumber Kesalahan untuk error yang diamati menggunakan Pemantauan API, Alat Pelacakan, atau log akses NGINX seperti yang dijelaskan di Langkah-langkah diagnosis umum.
- Jika Fault Code adalah
protocol.http.ResponseWithBody
dan Fault Source memiliki nilaitarget
, ini menunjukkan bahwa server backend telah merespons dengan kode status204 No Content
atau205 Reset Content
dengan isi respons dan/atau salah satu header yang disebutkan dalam Kemungkinan penyebab. Untuk memvalidasi apakah server backend telah benar-benar mengirim isi payload respons dan/atau satu atau beberapa header yang disebutkan dalam Kemungkinan penyebab, Anda dapat melakukan langkah-langkah berikut:
Jika Anda adalah pengguna Cloud Publik, dan dapat membuat permintaan API yang sama ke server backend secara langsung dari sistem Anda.
- Jika Anda adalah pengguna Private Cloud, Anda dapat membuat permintaan API yang sama ke server backend secara langsung dari salah satu Pemroses Pesan yang terkait dengan organisasi dan lingkungan tertentu tempat kegagalan terjadi.
Tinjau respons yang diterima dari server backend dan verifikasi bahwa respons tersebut berisi isi payload respons dan/atau satu atau beberapa header yang disebutkan di atas. Jika ya, maka 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 kode status
204 No Content
danContent-Encoding: gzip
Contoh #2
Contoh #2: Respons Server Backend 204 dengan Header Panjang Konten
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 kode status
204 No Content
danContent-Length: 48
Contoh #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 Response
Dalam contoh ini, server backend merespons dengan kode status
205 Reset Content
dengan isi responsThis is a sample Response.
- Dalam semua contoh di atas, server backend mengirim kode status
204 No Content
atau205 Reset Content
dengan isi respons dan/atau salah satu header yang disebutkan dalam Kemungkinan penyebab. - Oleh karena itu, Apigee Edge mengirim kode status
502 Bad Gateway
dengan kode errorprotocol.http.ResponseWithBody
.
Resolusi
Pastikan server backend selalu mematuhi Spesifikasi
RFC 7231, bagian 6.3.6: 205 Reset Content, saat mengirim respons 204 No Content
atau 205 Reset Content
ke Apigee Edge. Artinya, server backend
TIDAK BOLEH mengirim hal berikut sebagai bagian dari respons 204 No Content
atau
205 Reset Content
:
- Isi payload respons
- Dan salah satu header berikut:
Content-Length
Content-Encoding
Transfer-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 Tidak Ada Konten |
RFC 7231, bagian 6.3.6: 205 Reset Konten |
Poin-poin penting yang perlu diperhatikan
Solusi yang direkomendasikan adalah memperbaiki server backend agar mengirim 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 Harus 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
- Selesaikan perintah
curl
yang digunakan untuk mereproduksi error502
- File rekaman aktivitas untuk permintaan API
Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk permintaan yang gagal
- Nama lingkungan
- Paket Proxy API
- File rekaman aktivitas untuk permintaan API
Log akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Tempat: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Pemroses Pesan
/opt/apigee/var/log/edge-message-processor/logs/system.log