414 URI Permintaan Terlalu Panjang - TooBigLine

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"
      }
   }
}

Perlu diperhatikan 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 apa baris permintaan dan cara memeriksa ukurannya.

Memahami Baris Permintaan

Permintaan HTTP biasa terdiri dari tiga bagian:

  1. Baris Permintaan
  2. ( Kumpulan header HTTP )
  3. [ Isi ]

Baris permintaan terdiri dari tiga bagian seperti yang ditunjukkan di bawah ini.

Request-Line = <Method> <Request-URI> <HTTP-Version>

Ketika permintaan HTTP dibuat oleh aplikasi klien ke server, baris pertama menuju server berisi Request-Line yang dijelaskan di atas. Langkah ini diikuti oleh {i>header<i} dan isi/{i>payload<i} permintaan.

Screenshot contoh berikut menunjukkan permintaan curl standar, yaitu Request (bersama dengan Request-Line) dan bagian Response.

Memahami ukuran Baris Permintaan

  1. Dalam contoh yang dibahas di atas, baris awal (baris pertama) dalam permintaan juga disebut sebagai Request-Line, adalah sebagai berikut:
    GET /test/ HTTP/1.1
    

    Ukuran Baris Permintaan adalah ~19 bytes karena berisi 19 ASCII characters. Karena lokasi ini berada dalam batas yang diizinkan di Apigee Edge, permintaan diproses tanpa error dan Anda mendapatkan respons yang berhasil.

  2. Demikian pula jika Anda melihat faultstring di Pesan error yang ditampilkan di atas, berisi "request line size exceeding 7,168". Ini menunjukkan bahwa Request-Line dalam permintaan HTTP yang dibuat oleh klien melebihi 7.168 byte.

Berikut adalah kemungkinan penyebab error ini:

Penyebab Deskripsi Petunjuk pemecahan masalah berlaku untuk
Ukuran payload permintaan melebihi batas yang diizinkan Ukuran URI Permintaan yang dikirim oleh aplikasi klien sebagai bagian dari permintaan 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:

  1. Login ke UI Apigee Edge sebagai pengguna dengan peran yang sesuai.
  2. Beralihlah ke organisasi tempat Anda ingin menyelidiki masalah tersebut.

  3. Buka Analyze > Pemantauan API > Investigasi.
  4. Pilih jangka waktu tertentu saat Anda melihat error.
  5. Gambarkan Kode Kesalahan terhadap Waktu.
  6. Pilih sel yang memiliki kode kesalahan protocol.http.TooBigLine dan kode status 414 seperti yang ditunjukkan di bawah ini:

    ( lihat gambar yang lebih besar)

  7. Anda akan melihat informasi tentang kode kesalahan protocol.http.TooBigline sebagaimana ditunjukkan di bawah ini:

    ( lihat gambar yang lebih besar)

  8. Klik View logs dan luaskan baris untuk permintaan yang gagal:

    ( lihat gambar yang lebih besar)

  9. Dari jendela Logs, perhatikan detail berikut:

    • Kode Status: 414
    • Sumber Kesalahan: apigee
    • Kode Kesalahan: protocol.http.TooBigLine.
    • Panjang Permintaan(byte): 7244 (> 7KB)
  10. Jika Sumber Kesalahan memiliki nilai apigee atau MP, Fault Code memiliki nilai protocol.http.TooBigLine dan Request-Length: lebih dari 7 KB, artinya permintaan HTTP dari klien memiliki URI permintaan yang lebih besar dari batas yang diizinkan di Apigee.

Alat rekaman aktivitas

NGINX

Untuk mendiagnosis error menggunakan log akses NGINX:

  1. Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk menentukan informasi penting tentang error 414 HTTP.
  2. 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.

  3. Telusuri untuk mengetahui apakah terdapat error 414 selama durasi tertentu atau tidak (jika masalah terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan 414.
  4. Jika Anda menemukan error 414 dengan X-Apigee-fault-code yang cocok dengan nilai protocol.http.TooBigLine, lalu tentukan nilai 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

    Catat Panjang Permintaan: 7244 (7.244KB > allowed limit)

Penyebab: Ukuran payload permintaan melebihi batas yang diizinkan

Diagnosis

  1. Tentukan Kode Kesalahan, Sumber Kesalahan, dan Ukuran Panjang Permintaan untuk error yang diamati menggunakan log Pemantauan API, Alat Pelacak, atau Akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
  2. Jika Sumber Kesalahan memiliki nilai apigee atau MP, menunjukkan bahwa ukuran permintaan yang dikirim oleh aplikasi klien ke Apigee lebih besar dari batas yang diizinkan di Apigee Edge.
  3. Anda dapat memvalidasi bahwa ukuran baris permintaan telah melampaui batas 7 KB 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 Baris Permintaan melampaui batas yang diizinkan, yaitu 7 KB.

    Contoh pesan error:

    "faultstring":"request line size exceeding 7,168"
    

    Permintaan sebenarnya

    Untuk memvalidasi menggunakan permintaan yang sebenarnya:

    Jika Anda memiliki akses ke permintaan sebenarnya yang dibuat oleh aplikasi klien, kemudian lakukan langkah-langkah berikut:

    1. Verifikasi ukuran URI yang diteruskan dalam permintaan.
    2. Jika Anda menemukan bahwa ukuran URI lebih dari batas yang diizinkan di Apigee Edge, yaitu penyebab masalah tersebut.

      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, artinya berisi lebih dari 7 K karakter ASCII.

      Jika Anda menggunakan beberapa klien lain, Anda dapat meninjau log klien dan coba cari tahu ukuran baris permintaan yang dikirim ke 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 Baris Permintaan telah melampaui batas yang diizinkan di Apigee Edge.

    1. Periksa log Pemroses Pesan:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Telusuri apakah ada Error 414 selama periode tertentu durasi (jika masalah terjadi di masa lalu) atau jika ada permintaan masih gagal dengan 414. Anda dapat menggunakan string penelusuran berikut.
      grep -ri "exceeding"
      
      grep -ri "RequestURITooLong"
      
    3. 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 di pesan error di atas menunjukkan bahwa ukuran URI Permintaan lebih dari 7 KB. Oleh karena itu, Apigee Edge menampilkan pengecualian com.apigee.errors.http.user.RequestURITooLong dan pengembalian Kode status 414 dengan kode kesalahan protocol.http.TooBigline ke aplikasi klien.

Resolusi

Perbaiki ukuran

Opsi #1 [Direkomendasikan]: Perbaiki aplikasi klien agar tidak mengirimkan ukuran URI permintaan lebih besar dari batas yang diizinkan

  1. Menganalisis alasan klien tertentu mengirim ukuran URI permintaan lebih dari batas yang diizinkan seperti yang ditetapkan dalam Batas.
  2. Jika tidak diinginkan, ubah aplikasi klien Anda agar mengirimkan URI permintaan kurang dari batas yang diizinkan.

    Pada contoh yang dibahas di atas, Anda dapat memperbaiki masalah dengan meneruskan kueri panjang sebagai bagian dari isi/payload permintaan alih-alih meneruskannya sebagai bagian dari URL permintaan seperti yang ditunjukkan di bawah ini:

    curl https://<host>/testtoobigline -k -X GET -d '{_qparam=000000000000000000<trimmed>}' -v
    
  3. Jika Anda menginginkannya dan Anda ingin mengirim URI melebihi batas yang diizinkan, buka metode opsi berikutnya.

CwC

Opsi no. 2 : Gunakan properti CwC untuk meningkatkan batas baris permintaan

Apigee menyediakan 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 mengirimkan Request/Response-Lines yang ukurannya lebih besar dari batas yang diizinkan seperti yang didokumentasikan untuk Batas Baris Permintaan/Respons di Apigee Edge Limits.

  1. Jika Anda adalah pengguna Cloud Publik, batas maksimum untuk Permintaan dan Ukuran Baris Respons seperti yang didokumentasikan untuk ukuran Permintaan/Baris Respons di Batas Apigee Edge.
  2. Jika Anda adalah pengguna Private Cloud , Anda mungkin telah mengubah ukuran maksimum default batas untuk ukuran Baris Respons dan Permintaan (meskipun bukan praktik yang direkomendasikan). Anda dapat menentukan batas ukuran Baris 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.line.limit memiliki telah diperbarui dengan nilai baru di {i>Message Processors<i}.

  1. Di mesin Pemroses Pesan, telusuri properti HTTPRequest.line.limit dalam /opt/apigee/edge-message-processor/conf dan periksa lihat nilai yang telah ditetapkan seperti yang ditunjukkan di bawah ini:
    grep -ri "HTTPRequest.line.limit" /opt/apigee/edge-message-processor/conf
    
  2. Contoh hasil dari perintah di atas adalah sebagai berikut:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPRequest.line.limit=7k
    
  3. Pada contoh output di atas, perhatikan bahwa properti HTTPRequest.line.limit telah ditetapkan dengan nilai 7k dalam http.properties.

    Hal ini menunjukkan bahwa batas ukuran Baris Permintaan yang dikonfigurasi di Apigee untuk Pribadi Cloud sebesar 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
  • Menyelesaikan perintah curl yang digunakan untuk mereproduksi error 414
  • 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 pelacakan untuk permintaan API yang gagal
  • Menyelesaikan perintah curl yang digunakan untuk mereproduksi error 414
  • 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