Anda 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 kita melihat kemungkinan penyebab error ini, mari kita pahami apa yang dimaksud dengan baris permintaan dan cara memeriksa ukurannya.
Memahami Request-Line
Permintaan HTTP standar terdiri dari tiga bagian:
- Request-Line
- ( Set header HTTP )
- [ Body ]
Baris permintaan terdiri dari tiga bagian seperti yang ditunjukkan di bawah.
Request-Line = <Method> <Request-URI> <HTTP-Version>
Saat permintaan HTTP dibuat oleh aplikasi klien ke server, baris pertama yang masuk ke 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 (bersama dengan Request-Line), dan bagian Response.
Memahami ukuran Request-Line
- Dalam contoh yang dibahas di atas, baris start (baris pertama) dalam permintaan, yang juga
disebut sebagai Request-Line, adalah sebagai berikut:
GET /test/ HTTP/1.1
Ukuran Request-Line adalah
~19 byteskarena berisi19 ASCII characters. Karena berada dalam batas yang diizinkan di Apigee Edge, permintaan diproses tanpa error dan Anda mendapatkan respons yang berhasil. - Demikian pula, jika Anda melihat
faultstringdalam 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 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 ini.
- Buka halaman Analyze > API Monitoring > Investigate.
- Pilih jangka waktu tertentu saat Anda mengamati error.
- Buat grafik Fault Code terhadap Time.
- Pilih sel yang memiliki kode kesalahan
protocol.http.TooBigLinedan kode status414seperti yang ditunjukkan di bawah:( lihat gambar yang lebih besar)
Anda akan melihat informasi tentang kode kesalahan
protocol.http.TooBiglineseperti yang ditunjukkan di bawah:( lihat gambar yang lebih besar)
Klik View logs dan luaskan baris untuk permintaan yang gagal:
( lihat gambar yang lebih besar)
Dari jendela Logs, perhatikan detail berikut:
- Status Code:
414 - Fault Source:
apigee - Fault Code:
protocol.http.TooBigLine. - Request Length(bytes):
7244 (> 7KB)
- Status Code:
- Jika Fault Source memiliki nilai
apigeeatauMP, Fault Code memiliki nilaiprotocol.http.TooBigLine, dan Request-Length lebih dari 7 KB, hal ini menunjukkan bahwa permintaan HTTP dari klien memiliki URI permintaan yang lebih besar dari batas yang diizinkan di Apigee.
Alat pelacakan
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
414. Periksa log akses NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDengan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Telusuri untuk melihat apakah ada
414error selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan414. Jika Anda menemukan error
414dengan X-Apigee-fault-code yang cocok dengan nilaiprotocol.http.TooBigLine, 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.TooBigLineX-Apigee-fault-source policyPerhatikan Panjang Permintaan:
7244(7.244 KB > batas yang diizinkan)
Penyebab: Ukuran payload permintaan lebih besar dari batas yang diizinkan
Diagnosis
- Tentukan Fault Code, Fault Source, dan ukuran Request-Length untuk error yang diamati menggunakan Pemantauan API, Alat Pelacakan, atau Log Akses NGINX seperti yang dijelaskan di Langkah-langkah diagnosis umum.
- Jika Fault Source memiliki nilai
apigeeatauMP, hal 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 melebihi batas yang diizinkan sebesar 7 KB menggunakan salah satu dari
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. Thefaultstringmenunjukkan bahwa ukuran Request-Line melebihi batas yang diizinkan sebesar 7 KB.Contoh pesan error:
"faultstring":"request line size exceeding 7,168"
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 URI yang diteruskan dalam permintaan.
Jika Anda menemukan bahwa ukuran URI lebih besar dari batas yang diizinkan di Apigee Edge, itulah penyebab masalahnya.
Contoh permintaan:
curl http://<hostalias>/testtoobigline?_qparam=000000000000000000……..000000<trimmed> -k -X POST
Dalam kasus di atas, nilai parameter kueri
qparamlebih besar dari 7 KB, yaitu berisi lebih dari 7 K karakter ASCII.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 Request-Line telah melebihi 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
414Error selama durasi tertentu (jika masalah terjadi di masa lalu) atau apakah ada permintaan yang masih gagal dengan414. Anda dapat menggunakan string penelusuran berikut.grep -ri "exceeding"
grep -ri "RequestURITooLong"
- Anda akan menemukan baris dari
system.logyang 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,168dalam pesan error di atas menunjukkan bahwa ukuran URI Permintaan lebih dari 7 KB. Oleh karena itu, Apigee Edge menampilkan pengecualiancom.apigee.errors.http.user.RequestURITooLongdan menampilkan414kode status dengan kode kesalahanprotocol.http.TooBiglineke aplikasi klien.
Resolusi
Memperbaiki ukuran
Opsi #1 [Direkomendasikan]: Memperbaiki aplikasi klien agar tidak mengirim ukuran URI permintaan yang lebih besar dari batas yang diizinkan
- Analisis alasan klien tertentu mengirim ukuran URI permintaan yang lebih besar dari batas yang diizinkan seperti yang ditentukan dalam Batas.
Jika tidak diinginkan, ubah aplikasi klien Anda sehingga mengirim ukuran URI permintaan yang kurang dari batas yang diizinkan.
Dalam contoh yang dibahas di atas, Anda dapat memperbaiki masalah dengan meneruskan parameter kueri panjang sebagai bagian dari isi/payload permintaan, bukan meneruskannya sebagai bagian dari URL permintaan seperti yang ditunjukkan di bawah:
curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v- Jika diinginkan dan Anda ingin mengirim URI yang lebih besar 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 Message Processor
Batas
Apigee mengharapkan aplikasi klien dan server backend tidak mengirim Baris Permintaan/Respons yang ukurannya lebih besar dari batas yang diizinkan seperti yang didokumentasikan untuk Batas Baris Permintaan/Respons di Batas Apigee Edge.
- Jika Anda adalah pengguna Public Cloud, batas maksimum untuk ukuran Baris Permintaan dan Respons adalah seperti yang didokumentasikan untuk ukuran Baris Permintaan/Respons di Batas Apigee Edge.
- Jika Anda adalah pengguna Private Cloud, Anda mungkin telah mengubah batas maksimum default untuk ukuran Baris Permintaan dan Respons (meskipun bukan praktik yang direkomendasikan). Anda dapat menentukan batas ukuran Request-Line maksimum dengan mengikuti petunjuk di 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 Message Processor.
- Di mesin Message Processor, telusuri properti
HTTPRequest.line.limitdi direktori/opt/apigee/edge-message-processor/confdan periksa nilai yang telah ditetapkan seperti yang ditunjukkan di bawah:grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
- Hasil contoh dari perintah di atas adalah sebagai berikut:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
Dalam output contoh di atas, perhatikan bahwa properti
HTTPRequest.line.limittelah ditetapkan dengan nilai7kdihttp.properties.Hal ini menunjukkan bahwa batas untuk ukuran Request-Line yang dikonfigurasi di Apigee untuk Private Cloud adalah 7 KB.
Jika Anda masih memerlukan bantuan dari Dukungan Apigee, buka Mengumpulkan informasi diagnostik.
Mengumpulkan informasi diagnostik
Kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:
Jika Anda adalah pengguna Public Cloud, berikan informasi berikut:
- Nama organisasi
- Nama lingkungan
- Nama API Proxy
- Perintah
curllengkap yang digunakan untuk mereproduksi error414 - File pelacakan 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 API Proxy
- File pelacakan untuk permintaan API yang gagal
- Perintah
curllengkap yang digunakan untuk mereproduksi error414 Log akses NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDengan: ORG, ENV, dan PORT# diganti dengan nilai sebenarnya.
- Log sistem Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log