Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 431 Request Header Fields Too
Large dengan kode error protocol.http.TooBigHeaders sebagai respons untuk panggilan API.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 431 Request Header Fields Too Large
Selain itu, Anda mungkin melihat pesan error berikut:
{
"fault":{
"faultstring":"request headers size exceeding 25,600",
"detail":{
"errorcode":"protocol.http.TooBigHeaders"
}
}
}Kemungkinan penyebab
Error ini terjadi jika total ukuran semua header permintaan yang dikirim oleh aplikasi klien ke Apigee Edge sebagai bagian dari permintaan HTTP lebih besar daripada batas yang diizinkan di Apigee Edge sesuai dengan RFC 6585, bagian 5: 431 Request Header Fields Too Large.
Berikut kemungkinan penyebab error ini:
| Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
|---|---|---|
| Ukuran Header Permintaan lebih besar dari batas yang diizinkan | Ukuran total semua header yang dikirim oleh aplikasi klien sebagai bagian dari permintaan HTTP ke Apigee Edge lebih besar daripada 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.
Beralih ke organisasi tempat Anda ingin menyelidiki masalah.
- Buka halaman Analyze > API Monitoring > Investigate.
- Pilih jangka waktu tertentu saat Anda mengamati error.
- Petakan Kode Kesalahan terhadap Waktu.
- Pilih sel yang memiliki kode kesalahan
protocol.http.TooBigHeadersdan kode status431seperti yang ditunjukkan di bawah:( lihat gambar yang lebih besar)
Anda akan melihat informasi tentang kode kesalahan
protocol.http.TooBigHeadersseperti yang ditunjukkan di bawah:( lihat gambar yang lebih besar)
Klik Lihat log dan luaskan baris untuk permintaan yang gagal:
( lihat gambar yang lebih besar)
Dari jendela Logs, perhatikan detail berikut:
- Kode Status:
431 - Sumber Kesalahan:
apigee - Kode Kesalahan:
protocol.http.TooBigHeaders. - Panjang Permintaan(byte):
32150 (> 25 KB)
- Kode Status:
- Jika Fault Source memiliki nilai
apigeeatauMP, Fault Code memiliki nilaiprotocol.http.TooBigHeaders, dan Request Length lebih dari 25 KB, maka hal ini menunjukkan bahwa total ukuran semua header permintaan yang dikirim oleh aplikasi klien sebagai bagian dari permintaan HTTP lebih besar daripada batas yang diizinkan di Apigee.
Alat rekaman aktivitas
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
431. 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
431selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan431. Jika Anda menemukan error
431dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.TooBigHeaders, tentukan nilai X-Apigee-fault-source.
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.TooBigHeadersX-Apigee-fault-source MPPerhatikan Panjang Permintaan:
40159(40 KB lebih besar dari 25 KB, batas yang diizinkan untuk header permintaan di Apigee Edge)Dalam entri log contoh di atas, X-Apigee-fault-source memiliki nilai
apigeeatauMP, X-Apigee-fault-code memiliki nilaiprotocol.http.TooBigHeaders, dan Request Length adalah 40 KB, yang lebih besar dari batas yang diizinkan di Apigee - 25 KB. Hal ini menunjukkan dengan jelas bahwa total ukuran semua header permintaan yang dikirim oleh aplikasi klien sebagai bagian dari permintaan HTTP telah melampaui batas yang diizinkan sebesar 25 KB di Apigee Edge.
Penyebab: Ukuran Header Permintaan lebih besar dari batas yang diizinkan
Diagnosis
- Tentukan Kode Kesalahan, Sumber Kesalahan, dan ukuran Panjang Permintaan untuk error yang diamati menggunakan Pemantauan API atau log Akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
- Jika Sumber Kesalahan memiliki nilai
apigeeatauMP, Kode Kesalahan memiliki nilaiprotocol.http.TooBigHeaders, dan Panjang Permintaan lebih dari 25 KB, maka hal ini menunjukkan bahwa ukuran permintaan yang dikirim oleh aplikasi klien ke Apigee lebih besar daripada batas yang diizinkan di Apigee Edge. - Anda dapat memvalidasi bahwa ukuran header permintaan telah melampaui batas yang diizinkan sebesar 25 KB 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.faultstringmenunjukkan bahwa total ukuran Header Permintaan telah melampaui batas yang diizinkan, yaitu 25 KB.Contoh pesan error:
"faultstring":"request headers size exceeding 25,600"
Permintaan sebenarnya
Untuk memvalidasi menggunakan permintaan sebenarnya:
Jika Anda memiliki akses ke permintaan sebenarnya yang dibuat oleh aplikasi klien, lakukan langkah-langkah berikut:
- Verifikasi ukuran header yang diteruskan dalam permintaan.
Jika Anda menemukan bahwa ukuran total header lebih besar daripada batas yang diizinkan di Apigee Edge, maka itulah penyebab masalahnya.
Contoh permintaan:
curl -v https://HOSTALIAS/test -H "header0: 000000000000000000……..000000<trimmed>" -H "header1: 111111111111111111……..111111<trimmed>" -H "header2: 222222222222222222……..222222<trimmed>"-H "header3: 333333333333333333……..333333<trimmed>"
Dalam kasus di atas, ukuran total header
header0,header1,header2, danheader3lebih besar dari 25 KB, yaitu berisi lebih dari 25 K karakter ASCII (byte).Jika Anda menggunakan klien lain, Anda dapat meninjau log klien dan mencoba mencari tahu ukuran baris permintaan yang dikirim ke Apigee Edge.
Log Message Processor
Untuk memvalidasi menggunakan log Message Processor:
Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log Message Processor untuk memvalidasi apakah ukuran Header Permintaan telah melampaui batas yang diizinkan di Apigee Edge.
Periksa log Message Processor:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Cari untuk melihat apakah ada error
431selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan431. Anda dapat menggunakan string penelusuran berikut.grep -ri "exceeding"
grep -ri "RequestHeadersTooLarge"
- Anda akan menemukan baris dari
system.logyang mirip dengan berikut ini:2021-07-27 08:30:28,419 NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:GET, uri:/test/, message Id:null, exception:com.apigee.errors.http.user.RequestHeadersTooLarge{ code = protocol.http.TooBigHeaders, message = request headers size exceeding 25,600, associated contexts = []}, context:Context@9c5903 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.205.251:8443 Local:192.168.67.23:22188]@25130 useCount=1 bytesRead=0 bytesWritten=15367 age=667062ms lastIO=0ms isOpen=true)
Teks
message = request headers size exceeding 25,600dalam pesan error di atas menunjukkan bahwa ukuran total Header Permintaan lebih dari 25 KB. Oleh karena itu, Apigee Edge akan memunculkan pengecualiancom.apigee.errors.http.user.RequestHeadersTooLargedan menampilkan kode status431dengan kode kesalahanprotocol.http.TooBigHeaderske aplikasi klien.
Resolusi
Memperbaiki ukuran
Opsi #1 [Direkomendasikan]: Perbaiki aplikasi klien agar tidak mengirim header permintaan dengan ukuran total yang lebih besar dari batas yang diizinkan
- Analisis alasan klien tertentu mengirim Header Permintaan dengan ukuran besar yang membuat ukuran total header melebihi batas yang diizinkan seperti yang ditentukan dalam Batas.
Jika tidak diinginkan, ubah aplikasi klien Anda sehingga mengirim Header Permintaan dengan ukuran yang kurang dari batas yang diizinkan.
Dalam contoh yang dibahas di atas, Anda dapat memperbaiki masalah dengan meneruskan parameter nilai header panjang sebagai bagian dari isi/payload permintaan:
curl -v https://HOSTALIAS/test -d '{ "header0: 000000000000000000……..000000<trimmed>" , "header1: 111111111111111111……..111111<ttrimmed>" , "header2: 222222222222222222……..222222<ttrimmed>", "header3: 333333333333333333……..333333<ttrimmed>" }'- Jika diinginkan dan Anda ingin mengirim header lebih dari batas yang diizinkan, buka opsi berikutnya.
CwC
Opsi #2 : Menggunakan properti CwC untuk meningkatkan batas baris permintaan
Apigee menyediakan properti CwC yang memungkinkannya meningkatkan batas ukuran baris permintaan. Untuk mengetahui detailnya, lihat Menetapkan batas baris permintaan di Pemroses Pesan
Batas
Apigee mengharapkan aplikasi klien dan server backend tidak mengirim Header Permintaan/Respons yang ukurannya lebih besar dari batas yang diizinkan seperti yang didokumentasikan untuk Batas Ukuran Header Permintaan/Respons di Batas Apigee Edge.
- Jika Anda adalah pengguna Cloud Publik, batas maksimum untuk ukuran Header Permintaan dan Respons adalah seperti yang didokumentasikan untuk ukuran Header Permintaan/Respons di Batas Apigee Edge.
- Jika Anda adalah pengguna Private Cloud, Anda mungkin telah mengubah batas maksimum default untuk ukuran Header Permintaan dan Respons (meskipun bukan praktik yang direkomendasikan). Anda dapat menentukan batas ukuran Header Permintaan maksimum dengan mengikuti petunjuk di Cara memeriksa batas saat ini.
Bagaimana cara memeriksa batas saat ini?
Bagian ini menjelaskan cara memverifikasi bahwa properti HTTPRequest.headers.limit telah diperbarui dengan nilai baru di Pemroses Pesan.
- Di mesin Message Processor, telusuri properti
HTTPRequest.headers.limitdi direktori/opt/apigee/edge-message-processor/confdan periksa untuk melihat nilai yang telah ditetapkan seperti yang ditunjukkan di bawah:grep -ri "HTTPRequest.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:HTTPRequest.headers.limit=25k
Dalam contoh output di atas, perhatikan bahwa properti
HTTPRequest.headers.limittelah ditetapkan dengan nilai25kdihttp.properties.Hal ini menunjukkan bahwa batas ukuran Header Permintaan yang dikonfigurasi di Apigee untuk Private Cloud adalah 25 KB.
Spesifikasi
Apigee Edge mengharapkan aplikasi klien tidak mengirim header berukuran besar sebagai bagian dari
permintaan. Jika permintaan berisi header dengan ukuran total lebih dari batas yang ditentukan,
Apigee akan menampilkan 431 Request Header Fields Too Large sesuai dengan spesifikasi RFC
berikut:
| Spesifikasi |
|---|
| RFC 6585, bagian 5: 431 Kolom Header Permintaan Terlalu Besar |
Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Must gather diagnostic information.
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 error431 - 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 organisasi
- Nama lingkungan
- Paket Proxy API
- File rekaman aktivitas untuk permintaan API yang gagal
- Perintah
curllengkap yang digunakan untuk memunculkan kembali error431 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