Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Gejala
Aplikasi klien mendapatkan kode status HTTP 414 Request-URI Too Long
dengan
kode error protocol.http.TooBigLine
sebagai respons untuk panggilan API.
Pesan error
Aplikasi klien mendapatkan kode respons berikut:
HTTP/1.1 414 Request-URI Too Long
Selain itu, Anda mungkin melihat pesan error berikut:
{ "fault":{ "faultstring":"request line size exceeding 7,168", "detail":{ "errorcode":"protocol.http.TooBigLine" } } }
Perhatikan bahwa faultstring
dalam pesan error di atas berisi batas yang diizinkan untuk baris permintaan di Apigee Edge, yaitu 7168 bytes
(7 KB).
Kemungkinan penyebab
Error ini terjadi jika ukuran baris permintaan yang dikirim oleh aplikasi klien ke Apigee Edge sebagai bagian dari permintaan HTTP lebih besar dari batas yang diizinkan di Apigee Edge.
Sebelum melihat kemungkinan penyebab error ini, mari kita pahami arti baris permintaan dan cara memeriksa ukurannya.
Memahami Baris Permintaan
Permintaan HTTP umum terdiri dari tiga bagian:
- Baris Permintaan
- ( Kumpulan tajuk HTTP )
- [ Badan ]
Baris permintaan terdiri dari tiga bagian seperti yang ditunjukkan di bawah ini.
Request-Line = <Method> <Request-URI> <HTTP-Version>
Saat permintaan HTTP dibuat oleh aplikasi klien ke server, baris pertama yang menuju server berisi Request-Line yang dijelaskan di atas. Hal ini diikuti oleh header dan isi/payload permintaan.
Screenshot contoh berikut menunjukkan permintaan curl
standar, bagian Request (beserta Request-Line) dan bagian Response.
Memahami ukuran Baris Permintaan
- Dalam contoh yang dibahas di atas, baris awal (baris pertama) dalam permintaan, yang juga
disebut sebagai Baris Permintaan, adalah sebagai berikut:
GET /test/ HTTP/1.1
Ukuran Baris Permintaan adalah
~19 bytes
karena berisi19 ASCII characters
. Karena hal ini berada dalam batas yang diizinkan di Apigee Edge, permintaan akan diproses tanpa error dan Anda mendapatkan respons yang berhasil. - Demikian pula jika Anda melihat
faultstring
dalam Pesan error yang ditampilkan di atas, pesan tersebut berisi"request line size exceeding 7,168"
. Hal ini menunjukkan bahwa Request-Line dalam permintaan HTTP yang dibuat oleh klien melebihi 7.168 byte.
Berikut kemungkinan penyebab error ini:
Penyebab | Deskripsi | Petunjuk pemecahan masalah yang berlaku untuk |
---|---|---|
Ukuran payload permintaan lebih besar dari batas yang diizinkan | Ukuran Request-URI yang dikirim oleh aplikasi klien sebagai bagian dari permintaan HTTP ke Apigee Edge lebih besar dari batas yang diizinkan di Apigee Edge. | 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.TooBigLine
dan kode status414
seperti yang ditunjukkan di bawah ini: Anda akan melihat informasi tentang kode kesalahan
protocol.http.TooBigline
seperti yang ditunjukkan di bawah ini:Klik Lihat log dan luaskan baris untuk permintaan yang gagal:
Dari jendela Logs, perhatikan detail berikut:
- Kode Status:
414
- Sumber Kesalahan:
apigee
- Kode Kesalahan:
protocol.http.TooBigLine
. - Panjang Permintaan(byte):
7244 (> 7KB)
- Kode Status:
- Jika Fault Source memiliki nilai
apigee
atauMP
, Fault Code memiliki nilaiprotocol.http.TooBigLine
dan Request-Length lebih dari 7 KB, yang menunjukkan bahwa permintaan HTTP dari klien memiliki URI permintaan yang lebih besar daripada batas yang diizinkan di Apigee.
Alat pelacak
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
414
HTTP. 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
414
selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan414
. Jika Anda menemukan error
414
dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.TooBigLine
, tentukan nilai dari X-Apigee-fault-source.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.TooBigLine
X-Apigee-fault-source policy
Perhatikan Panjang Permintaan:
7244
(7,244 KB > batas yang diizinkan)
Penyebab: Ukuran payload permintaan melebihi batas yang diizinkan
Diagnosis
- Tentukan Kode Kesalahan, Sumber Kesalahan, dan Ukuran Panjang Permintaan untuk error yang diamati menggunakan Pemantauan API, Alat Pelacakan, atau log Akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
- Jika Fault Source memiliki nilai
apigee
atauMP
, ini menunjukkan bahwa ukuran permintaan yang dikirim oleh aplikasi klien ke Apigee lebih besar dari batas yang diizinkan di Apigee Edge. - Anda dapat memvalidasi bahwa ukuran baris permintaan telah melampaui batas yang diizinkan sebesar 7 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, lihat
faultstring
.faultstring
menunjukkan bahwa ukuran Baris Permintaan melampaui batas 7 KB yang diizinkan.Contoh pesan error:
"faultstring":"request line size exceeding 7,168"
Permintaan sebenarnya
Untuk memvalidasi menggunakan permintaan yang sebenarnya:
Jika Anda memiliki akses ke permintaan aktual yang dibuat oleh aplikasi klien, lakukan langkah-langkah berikut:
- Verifikasi ukuran URI yang diteruskan dalam permintaan.
Jika Anda menemukan bahwa ukuran URI melebihi batas yang diizinkan di Apigee Edge, maka itulah penyebab masalahnya.
Contoh permintaan:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
Dalam kasus di atas, nilai parameter kueri
qparam
lebih besar dari 7 KB, yaitu berisi lebih dari 7 K karakter ASCII.Jika menggunakan beberapa klien lain, Anda dapat meninjau log klien dan mencoba mengetahui ukuran baris permintaan yang dikirim ke Apigee Edge.
Log Pemroses Pesan
Untuk memvalidasi menggunakan log Pemroses Pesan:
Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log Pemroses Pesan untuk memvalidasi apakah ukuran Baris Permintaan telah melampaui batas yang diizinkan di Apigee Edge.
Periksa log Message Processor:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Telusuri untuk melihat apakah ada Error
414
selama durasi tertentu (jika masalah terjadi sebelumnya) atau apakah ada permintaan yang masih gagal dengan414
. Anda dapat menggunakan string pencarian berikut.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- Anda akan menemukan baris dari
system.log
yang mirip dengan berikut ini:2021-07-12 08:53:31,461 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - AbstractRequestListener.onException() : Request:null, uri:null, message Id:null, exception:com.apigee.errors.http.user.RequestURITooLong{ code = protocol.http.TooBigLine, message = request line size exceeding 7,168, associated contexts = []}, context:Context@366f4217 input=ClientInputChannel(SSLClientChannel[Accepted: Remote:192.168.195.90:8443 Local:192.168.67.23:34256]@301912 useCount=1 bytesRead=0 bytesWritten=45849 age=2254670ms lastIO=0ms isOpen=true)
Teks
message = request line size exceeding 7,168
dalam pesan error di atas menunjukkan bahwa ukuran URI Permintaan lebih dari 7 KB. Oleh karena itu, Apigee Edge menampilkan pengecualiancom.apigee.errors.http.user.RequestURITooLong
dan menampilkan kode status414
dengan kode kesalahanprotocol.http.TooBigline
ke aplikasi klien.
Resolusi
Ukuran tetap
Opsi #1 [Direkomendasikan]: Memperbaiki aplikasi klien agar tidak mengirim ukuran URI permintaan lebih besar dari batas yang diizinkan
- Analisis alasan klien tertentu mengirim ukuran URI permintaan lebih dari batas yang diizinkan seperti yang ditentukan dalam Batas.
Jika tidak diinginkan, ubah aplikasi klien agar mengirimkan URI permintaan dengan ukuran kurang dari batas yang diizinkan.
Dalam contoh yang dibahas di atas, Anda dapat memperbaiki masalah ini dengan meneruskan parameter kueri yang panjang sebagai bagian dari isi/payload permintaan, bukan meneruskannya sebagai bagian dari URL permintaan seperti yang ditunjukkan di bawah ini:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
- Jika diinginkan dan Anda ingin mengirim URI lebih dari batas yang diizinkan, buka opsi berikutnya.
CwC
Opsi no. 2 : Gunakan 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 pada Pemroses Pesan
Batas
Apigee memperkirakan aplikasi klien dan server backend tidak akan mengirim Request/Response-Lines yang ukurannya melebihi batas yang diizinkan seperti yang didokumentasikan untuk Request/Response Line Limit dalam Apigee Edge Limits.
- Jika Anda adalah pengguna Cloud Publik, batas maksimum untuk ukuran Baris Permintaan dan Respons adalah seperti yang didokumentasikan untuk ukuran Permintaan/Respons-Line di Batas Apigee Edge.
- Jika Anda adalah pengguna Private Cloud, Anda mungkin telah mengubah batas maksimum default untuk ukuran Permintaan dan Baris Respons (meskipun bukan praktik yang direkomendasikan). Anda dapat menentukan batas ukuran Baris Permintaan maksimum dengan mengikuti petunjuk di bagian Cara memeriksa batas saat ini.
Bagaimana cara memeriksa batas saat ini?
Bagian ini menjelaskan cara memverifikasi bahwa properti HTTPRequest.line.limit
telah diperbarui dengan nilai baru di Pemroses Pesan.
- Pada mesin Message Processor, telusuri properti
HTTPRequest.line.limit
dalam direktori/opt/apigee/edge-message-processor/conf
, lalu periksa untuk melihat nilai apa yang telah ditetapkan seperti yang ditunjukkan di bawah:grep -ri "HTTPRequest.line.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.line.limit=7k
Pada contoh output di atas, perhatikan bahwa properti
HTTPRequest.line.limit
telah ditetapkan dengan nilai7k
dihttp.properties
.Hal ini menunjukkan bahwa batas ukuran Baris Permintaan yang dikonfigurasi di Apigee untuk Private Cloud adalah 7 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
- Selesaikan perintah
curl
yang digunakan untuk mereproduksi error414
- 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
- Selesaikan perintah
curl
yang digunakan untuk mereproduksi error414
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