431 Kolom Header Permintaan Terlalu Besar - TooBigHeader

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 API panggilan telepon.

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 ukuran total semua {i>header<i} permintaan yang dikirim oleh aplikasi klien ke Apigee Edge sebagai bagian dari permintaan HTTP lebih besar dari batas yang diizinkan di Apigee Edge sesuai dengan RFC 6585, bagian 5: 431 Meminta Kolom Header Terlalu Besar.

Berikut adalah kemungkinan penyebab error ini:

Penyebab Deskripsi Petunjuk pemecahan masalah berlaku untuk
Ukuran Header Permintaan lebih besar dari batas yang diizinkan Ukuran total semua {i>header<i} 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:

  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.TooBigHeaders dan kode status 431 seperti yang ditunjukkan di bawah ini:

    ( lihat gambar yang lebih besar)

  7. Anda akan melihat informasi tentang kode kesalahan protocol.http.TooBigHeaders 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: 431
    • Sumber Kesalahan: apigee
    • Kode Kesalahan: protocol.http.TooBigHeaders.
    • Panjang Permintaan(byte): 32150 (> 25 KB)
  10. Jika Sumber Kesalahan memiliki nilai apigee atau MP, Fault Code memiliki nilai protocol.http.TooBigHeaders dan Panjang Permintaan lebih dari 25 KB, jadi itu 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:

  1. Jika Anda adalah pengguna Private Cloud, Anda dapat menggunakan log akses NGINX untuk menentukan informasi penting tentang error 431 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 431 selama durasi tertentu atau tidak (jika masalah terjadi di masa lalu) atau jika ada permintaan yang masih gagal dengan 431.
  4. Jika Anda menemukan error 431 dengan X-Apigee-fault-code yang cocok dengan nilai protocol.http.TooBigHeaders, 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.TooBigHeaders
    X-Apigee-fault-source MP

    Perhatikan Panjang Permintaan: 40159 (40 KB lebih besar dari 25 KB, batas yang diizinkan untuk header permintaan di Apigee Edge)

    Dalam contoh entri log di atas, X-Apigee-fault-source memiliki nilai apigee atau MP, X-Apigee-fault-code memiliki nilai protocol.http.TooBigHeaders dan Panjang Permintaan adalah 40 KB, yaitu lebih besar dari batas yang diizinkan di Apigee - 25 KB. Hal ini dengan jelas menunjukkan bahwa ukuran total semua header permintaan yang dikirim oleh aplikasi klien sebagai bagian dari telah melampaui batas yang diizinkan sebesar 25 KB di Apigee Edge.

Penyebab: Ukuran Header Permintaan lebih besar dari batas yang diizinkan

Diagnosis

  1. Tentukan Kode Kesalahan, Sumber Kesalahan, dan Ukuran Panjang Permintaan untuk error yang diamati menggunakan log Monitoring API atau Akses NGINX seperti yang dijelaskan dalam Langkah-langkah diagnosis umum.
  2. Jika Fault Source memiliki nilai apigee atau MP, Fault Code memiliki nilai protocol.http.TooBigHeaders, dan Panjang Permintaan lebih dari 25 KB, maka 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 header permintaan telah melebihi batas 25 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 total Header Permintaan telah melampaui batas 25 KB yang diizinkan.

    Contoh pesan error:

    "faultstring":"request headers size exceeding 25,600"
    

    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 header yang diteruskan dalam permintaan.
    2. Jika Anda menemukan bahwa ukuran total {i>header<i} lebih besar dari batas yang diizinkan di Apigee Edge, yaitu penyebab masalah tersebut.

      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 {i>header<i} header0, header1, header2, dan header3 lebih besar dari 25 KB, artinya, file ini berisi lebih dari 25 K karakter ASCII (byte).

      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 Header 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 untuk mengetahui apakah terdapat 431 error selama periode tertentu durasi (jika masalah terjadi di masa lalu) atau jika ada permintaan masih gagal dengan 431. Anda dapat menggunakan string penelusuran berikut.
      grep -ri "exceeding"
      
      grep -ri "RequestHeadersTooLarge"
      
    3. Anda akan menemukan baris dari system.log yang 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,600 di pesan error di atas menunjukkan bahwa total ukuran Header Permintaan lebih dari 25 KB. Oleh karena itu, Apigee Edge menampilkan pengecualian com.apigee.errors.http.user.RequestHeadersTooLarge dan pengembalian Kode status 431 dengan kode kesalahan protocol.http.TooBigHeaders ke aplikasi klien.

Resolusi

Perbaiki ukuran

Opsi #1 [Direkomendasikan]: Perbaiki aplikasi klien agar tidak mengirim header permintaan dengan total ukuran lebih besar dari batas yang diizinkan

  1. Analisis alasan klien tertentu mengirimkan Header Permintaan dengan ukuran yang membuat total ukuran {i>header<i} melebihi batas yang diizinkan seperti yang ditentukan dalam Batas.
  2. Jika tidak diinginkan, modifikasi aplikasi klien Anda agar mengirimkan Header Permintaan dengan ukuran kurang dari batas yang diizinkan.

    Pada contoh yang dibahas di atas, Anda dapat memperbaiki masalah dengan meneruskan header panjang parameter values 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>" }'
    
  3. Jika Anda menginginkannya dan Anda ingin mengirim {i>header<i} melebihi batas yang diizinkan, buka 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 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.

  1. 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.
  2. Jika Anda adalah pengguna Private Cloud , Anda mungkin telah mengubah ukuran maksimum default batas untuk ukuran Header Permintaan dan Respons (meskipun ini 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 memiliki telah diperbarui dengan nilai baru di {i>Message Processors<i}.

  1. Di mesin Pemroses Pesan, telusuri properti HTTPRequest.headers.limit dalam /opt/apigee/edge-message-processor/conf dan periksa lihat nilai yang telah ditetapkan seperti yang ditunjukkan di bawah ini:
    grep -ri "HTTPRequest.headers.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.headers.limit=25k
    
  3. Pada contoh output di atas, perhatikan bahwa properti HTTPRequest.headers.limit telah ditetapkan dengan nilai 25k dalam http.properties.

    Hal ini menunjukkan bahwa batas ukuran Header Permintaan yang dikonfigurasi di Apigee untuk Pribadi Cloud sebesar 25 KB.

Spesifikasi

Apigee Edge mengharapkan aplikasi klien tidak mengirim header berukuran besar sebagai bagian dari permintaan. Jika permintaan berisi {i>header<i} dengan ukuran total lebih besar dari batas yang ditentukan, Apigee menampilkan 431 Request Header Fields Too Large sesuai dengan RFC berikut spesifikasi:

Spesifikasi
RFC 6585, bagian 5: 431 Kolom Header Permintaan Terlalu Besar

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 431
  • 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 431
  • 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