Anda sedang melihat dokumentasi Apigee Edge.
Buka
Dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 502 Bad Gateway
dengan error
kode 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
204 No Content
atau 205 Reset Content
tetapi berisi respons
isi dan/atau satu atau beberapa header berikut:
Content-Length
Content-Encoding
Transfer-Encoding
Sesuai dengan spesifikasi
RFC 7231, bagian 6.3.5: 204 Tidak Ada Konten dan
RFC 7231, bagian 6.3.6: 205 Reset Konten, diharapkan tidak ada konten tambahan
harus 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 di bawah
situasi:
Kode status dari server backend | ||
---|---|---|
Respons dari server backend berisi | 204 Tidak Ada Konten. | 205 Reset Konten |
Isi Respons | ERROR | ERROR |
Header (disetel ke bukan nol) |
ERROR | ERROR |
(disetel ke encoding yang didukung di Apigee Edge) |
ERROR | TIDAK ADA ERROR |
Transfer-Encoding |
ERROR | ERROR |
Berikut adalah kemungkinan penyebab error ini:
Penyebab | Deskripsi | Petunjuk pemecahan masalah berlaku untuk |
---|---|---|
Isi respons atau Header dengan respons 204 dari server backend | Server backend mengirim 204 No Content atau 205 Reset Content
respons 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.
Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah tersebut.
- Buka Analyze > Pemantauan API > Investigasi.
- Pilih jangka waktu tertentu saat Anda melihat error.
- Gambarkan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
protocol.http.ResponseWithBody
sebagai yang ditampilkan di bawah ini:Anda akan melihat informasi tentang kode kesalahan
protocol.http.ResponseWithBody
seperti yang ditunjukkan di bawah ini:Klik View logs, lalu 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 Fault Source memiliki nilai
target
dan Fault Kode memiliki nilaiprotocol.http.ResponseWithBody
, maka menunjukkan bahwa kesalahan terjadi karena server backend mengirim kode status204 No Content
atau205 Reset Content
dengan isi respons dan/atau salah satu header yang disebutkan dalam Bagian Kemungkinan penyebab.
Alat rekaman aktivitas
Untuk mendiagnosis error menggunakan alat Trace:
- Mengaktifkan sesi rekaman aktivitas
dan:
- Tunggu hingga error
502 Bad Gateway
terjadi. atau - Jika Anda dapat mereproduksi masalah, lakukan panggilan API dan rekonstruksi error
502 Bad Gateway
.
- Tunggu hingga error
Pastikan Tampilkan semua FlowInfos diaktifkan:
- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitasnya.
- Menavigasi melalui berbagai fase pelacakan dan menemukan letak kegagalan terjadi.
Biasanya Anda akan menemukan error dalam Error
flowinfo
hanya 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 di 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 Direkam) di rekaman aktivitas lalu klik tombol tersebut.
Scroll ke bawah ke bagian Detail Fase, Header Error, dan tentukan nilai X-Apigee-fault-code dan X-Apigee-fault-source sebagaimana ditunjukkan di bawah ini:
- Perhatikan bahwa nilai X-Apigee-fault-code dan X-Apigee-fault-source
are protocol.http.ResponseWithBody
dantarget
. Ini menunjukkan bahwa kesalahan terjadi karena server backend mengirim sebuah kode status204 No Content
atau205 Reset Content
dengan isi respons dan/atau salah satu header yang disebutkan dalam 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 penting tentang HTTP
502 Bad Gateway
. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Di mana: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Telusuri apakah ada
502
error dengan kode errorprotocol.http.ResponseWithBody
selama durasi tertentu (jika masalah terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan502
. Jika Anda menemukan error
502
dengan X-Apigee-fault-code cocok dengan nilaiprotocol.http.ResponseWithBody
, lalu 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
. Ini menunjukkan bahwa kesalahan terjadi karena server backend mengirim sebuah kode status204 No Content
atau205 Reset Content
dengan isi respons dan/atau salah satu header yang disebutkan dalam 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 API Log akses Monitoring, Trace, atau NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
- Jika Kode Kesalahan adalah
protocol.http.ResponseWithBody
dan Sumber Kesalahan memiliki nilaitarget
, maka ini menunjukkan bahwa backend server telah merespons dengan status204 No Content
atau205 Reset Content
kode dengan isi respons dan/atau salah satu header yang disebutkan dalam Kemungkinan penyebab. Untuk memvalidasi apakah server backend memang telah mengirim isi payload respons dan/atau satu atau lainnya yang disebutkan di Kemungkinan penyebab, Anda dapat lakukan langkah-langkah berikut:
Jika Anda adalah pengguna Cloud Publik, 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 Pemroses Pesan yang terkait dengan organisasi dan lingkungan di mana kegagalan diamati.
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 penyebab kesalahan ini.
Contoh #1
Contoh #1: Backend Server Response 204 dengan Content-Encoding Header
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 {i> backend <i}merespons dengan
204 No Content
kode status danContent-Encoding: gzip
Contoh #2
Contoh #2: Backend Server Response 204 dengan Content-Length Header
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 {i> backend <i}merespons dengan
204 No Content
kode status 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 {i> backend <i}merespons dengan Kode status
205 Reset Content
dengan isi responsThis is a sample Response.
- Dalam semua contoh di atas, server backend mengirim
204 No Content
atau Kode status205 Reset Content
dengan isi respons dan/atau salah satu header yang disebutkan dalam Kemungkinan penyebab. - Oleh karena itu, Apigee Edge mengirimkan 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 204 No Content
atau 205 Reset Content
respons terhadap Apigee Edge. Artinya, server backend
TIDAK BOLEH mengirim data berikut sebagai bagian dari 204 No Content
atau
Respons 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 mengirim
204 No Content
atau 205 Reset Content
respons, 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 penting yang perlu diperhatikan
Solusi yang direkomendasikan adalah memperbaiki server backend agar mengirim 204 No Content
dan kode status 205 Reset Content
tanpa isi respons dan salah satu
header - Content-Length
, Content-Encoding
, dan
Transfer-Encoding
dan mematuhi spesifikasi
RFC 7231, bagian 6.3.5: 204 Tidak Ada Konten dan
RFC 7231, bagian 6.3.6: 205 Reset Konten.
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
- Menyelesaikan 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
Di mana: ORG, ENV, dan PORT# diganti dengan nilai aktual.
- Log sistem Pemroses Pesan
/opt/apigee/var/log/edge-message-processor/logs/system.log