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.TooBigHeaders
sebagai respons untuk API
panggilan telepon.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 502 Bad Gateway
Selain itu, Anda mungkin melihat pesan error berikut:
{ "fault":{ "faultstring":"response headers size exceeding 25,600", "detail":{ "errorcode":"protocol.http.TooBigHeaders" } } }
Kemungkinan penyebab
Error ini terjadi jika ukuran total header yang dikirim oleh target/backend server ke Apigee Edge sebagai bagian dari respons HTTP lebih besar dari yang diizinkan batas yang diizinkan di Apigee Edge.
Berikut adalah kemungkinan penyebab error ini:
Penyebab | Deskripsi | Petunjuk pemecahan masalah berlaku untuk |
---|---|---|
Ukuran header dalam respons melebihi batas yang diizinkan | Ukuran {i>header<i} dari {i>header<i} tertentu atau jumlah ukuran {i>header<i} dari semua header yang dikirim oleh server target/backend sebagai bagian dari respons HTTP ke Apigee Edge melebihi batas yang diizinkan di Apigee Edge. | 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.
- Anda dapat memilih filter Proxy untuk mempersempit kode kesalahan.
- Gambarkan Kode Kesalahan terhadap Waktu.
Pilih sel yang memiliki kode kesalahan
protocol.http.TooBigHeaders
sebagai yang ditampilkan di bawah ini:Anda akan melihat informasi tentang kode kesalahan
protocol.http.TooBigHeaders
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.TooBigHeaders
.
- Kode Status:
- Jika Fault Source memiliki nilai
target
dan Fault Kode memiliki nilaiprotocol.http.TooBigHeaders
, yang menunjukkan bahwa respons HTTP dari server target/ backend memiliki header yang ukurannya lebih besar daripada batas yang diizinkan di Apigee Edge.
Alat rekaman aktivitas
- 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
- Pilih salah satu permintaan yang gagal dan periksa rekaman aktivitasnya.
- Menavigasi melalui berbagai fase pelacakan dan menemukan letak kegagalan terjadi.
Biasanya Anda akan melihat error ini dalam alur bernama Error tepat setelah Permintaan dikirim ke server target seperti yang ditunjukkan di bawah ini:
( lihat gambar yang lebih besar)
Perhatikan nilai error dari rekaman aktivitas:
- error:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
Hal ini menunjukkan bahwa Apigee Edge (komponen Pemroses Pesan) menampilkan error sebagai segera setelah menerima respons dari server backend karena ukuran header melampaui batas yang diizinkan.
- error:
Anda akan melihat kegagalan di kolom Respons Dikirim ke Klien respons error yang dikirim oleh Apigee Edge seperti yang ditunjukkan di bawah ini:
- Perhatikan nilai error dari rekaman aktivitas. Contoh rekaman aktivitas di atas menunjukkan:
- Error:
502 Bad Gateway
. - Konten Error:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Error:
Buka fase AX (Data Analytics Direkam) di rekaman aktivitas lalu klik untuk melihat detail yang terkait.
( lihat gambar yang lebih besar)
Perhatikan nilai berikut:
Header error Nilai X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Konten Error: Isi {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
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.TooBigHeaders
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 yang cocok dengan nilaiprotocol.http.TooBigHeaders
, 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 error Nilai X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Penyebab: Ukuran header dalam respons melebihi batas yang diizinkan
Diagnosis
- Tentukan Fault Code, Fault Source, dan Response Payload Size untuk error yang diamati menggunakan Pemantauan API, alat Trace, atau log Akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
- Jika Fault Source memiliki nilai
target
, ini menunjukkan bahwa respons yang dikirim oleh server target/backend ke Apigee memiliki header yang ukurannya lebih besar daripada batas yang diizinkan di Apigee Edge. - Anda dapat memvalidasi bahwa respons dari target/backend memiliki header yang ukurannya sama
melebihi batas yang diizinkan 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, lihat
faultstring
.faultstring
menunjukkan bahwa ukuran header respons telah melampaui batas yang diizinkan.Contoh pesan error:
"faultstring":"response headers size exceeding 25,600"
Dalam pesan error di atas, perhatikan di
faultstring
bahwa respons memiliki header dengan ukuran total yang melebihi batas yang diizinkan.Permintaan sebenarnya
Untuk memvalidasi menggunakan permintaan yang sebenarnya:
Jika Anda memiliki akses ke permintaan sebenarnya yang dibuat ke server target/backend, kemudian lakukan langkah-langkah berikut:
- Jika Anda adalah pengguna Public Cloud/Private Cloud, buat permintaan langsung ke server backend dari server backend itu sendiri atau mesin tempat Anda diizinkan membuat permintaan ke backend server tertentu.
- Jika Anda adalah pengguna Private Cloud, Anda juga dapat membuat permintaan untuk server backend dari salah satu Pemroses Pesan.
- Periksa respons yang diterima dari server {i>backend<i} dan secara khusus menghitung dan memverifikasi total ukuran {i>header<i} yang diteruskan dalam respons.
Jika Anda menemukan bahwa ukuran header dalam payload respons melebihi batas yang diizinkan di Apigee Edge, maka itulah yang menjadi penyebab masalah.
Contoh respons dari server target:
curl -v https://TARGET_SERVER_HOST/test
* About to connect() to 10.1.0.10 port 9000 (#0) * Trying 10.1.0.10... * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0) > GET /test HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 10.1.0.10:9000 > Accept: */* < < HTTP/1.1 200 OK < Accept-Ranges: bytes < Content-Length: 0 < Content-Type: text/plain; charset=utf-8 < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
< Testheader1: XVlBzgba—-<snipped>---THctcuAx < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
< Date: Fri, 23 Jul 2021 09:51:22 GMT < * Connection #0 to host 10.1.0.10 left intactDalam contoh di atas,
Testheader1
danTestheader2
memiliki ukuran yang lebih tinggi, yang menjadi penyebab atas error ini karena melebihi batas yang diizinkan dalam Apigee Edge.
Log Pemroses Pesan
Untuk memvalidasi menggunakan log Pemroses Pesan:
Jika Anda pengguna Private Cloud, Anda dapat menggunakan log Pemroses Pesan untuk memvalidasi jika ukuran header Respons telah melampaui batas yang diizinkan di Apigee Edge.
Periksa log Pemroses Pesan:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Telusuri untuk mengetahui apakah terdapat
502
error selama periode tertentu durasi (jika masalah terjadi di masa lalu) atau jika ada permintaan masih gagal dengan502
. Anda dapat menggunakan string penelusuran berikut:grep -ri "response headers size exceeding"
- Anda akan menemukan baris dari
system.log
yang mirip dengan berikut ini. Ukuran header respons dapat bervariasi dalam kasus Anda:2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() : ClientChannel[Connected: Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1 bytesRead=0 bytesWritten=207 age=640ms lastIO=0ms isOpen=true.onExceptionRead exception: {} com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600 2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1 messageid:r23ijb1b-1 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractResponseListener.onException() : AbstractResponseListener.onError (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
-
Segera setelah Pemroses Pesan mendapatkan respons dari backend/target server dan menemukan bahwa ukuran total {i>header<i} lebih besar dari 25 KB, ia akan menghentikan dan menampilkan error:
response headers size exceeding 25,600
Ini menyiratkan bahwa Total Header Size lebih dari 25 KB dan Apigee menampilkan error saat ukuran mulai melebihi batas 25 KB dengan kode kesalahan sebagai
protocol.http.TooBigHeaders
Resolusi
Perbaiki ukuran
Opsi #1 [Direkomendasikan]: Memperbaiki aplikasi server target agar tidak mengirim ukuran header melebihi batas Apigee
- Menganalisis alasan server target tertentu mengirim ukuran header respons lebih banyak dari batas yang diizinkan seperti yang ditetapkan dalam Batas.
- Jika tidak diinginkan, ubah aplikasi server backend Anda agar mengirim header Respons yang ukurannya kurang dari batas yang diizinkan dalam Apigee Edge.
- Periksa apakah informasi header dapat dikirim sebagai bagian dari isi respons.
- Jika memungkinkan, kirimkan informasi besar yang ingin Anda kirim sebagai bagian dari {i>header<i} dalam isi respons. Hal ini akan memastikan bahwa Anda tidak akan melampaui respons batas header.
CwC
Opsi #2 : Gunakan properti CwC untuk meningkatkan batas ukuran header respons
Apigee menyediakan CwC yang memungkinkannya meningkatkan batas ukuran header Respons. Untuk mengetahui detailnya, lihat Mengonfigurasi batas untuk Pemroses Pesan
Batas
Apigee mengharapkan aplikasi klien dan server backend tidak mengirim ukuran header lebih besar dari batas yang diizinkan seperti yang didokumentasikan untuk Ukuran Header Permintaan/Respons di Batas Apigee Edge.
- Jika Anda adalah pengguna Cloud Publik, batas maksimum untuk Ukuran header Permintaan dan Respons seperti yang didokumentasikan untuk ukuran Header Permintaan/Respons di Batas Apigee Edge.
- Jika Anda adalah pengguna Private Cloud , Anda mungkin telah mengubah ukuran maksimum default batas ukuran header Permintaan dan Respons (meskipun ini bukan praktik yang direkomendasikan). Anda dapat menentukan batas ukuran Header Respons maksimum dengan mengikuti petunjuk di Cara memeriksa batas saat ini.
Bagaimana cara memeriksa batas saat ini?
Bagian ini menjelaskan cara memverifikasi bahwa properti HTTPResponse.headers.limit
memiliki
telah diperbarui dengan nilai baru di {i>Message Processors<i}.
- Di mesin Pemroses Pesan, telusuri properti
HTTPResponse.headers.limit
dalam direktori/opt/apigee/edge-message-processor/conf
dan periksa lihat nilai yang telah ditetapkan seperti yang ditunjukkan di bawah ini:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- Contoh hasil dari perintah di atas adalah sebagai berikut:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
Pada contoh output di atas, perhatikan bahwa properti
HTTPResponse.headers.limit
telah ditetapkan dengan nilai25k
dalamhttp.properties
.Hal ini menunjukkan bahwa batas ukuran payload Respons yang dikonfigurasi di Apigee untuk Pribadi Cloud sebesar 25 KB.
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
- Lengkapi output respons dari server target/backend beserta ukuran header
Jika Anda adalah pengguna Private Cloud, berikan informasi berikut:
- Pesan error lengkap yang diamati untuk permintaan yang gagal
- Nama organisasi
- Nama lingkungan
- Paket Proxy API
- File pelacakan untuk permintaan API yang gagal
- Menyelesaikan perintah
curl
yang digunakan untuk mereproduksi error502
- Lengkapi output respons dari server target/backend beserta ukuran header
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