Jawaban:
Tidak, HTTP tidak mendefinisikan batas apa pun. Namun sebagian besar server web membatasi ukuran tajuk yang mereka terima. Misalnya di batas default Apache adalah 8KB, di IIS 16K . Server akan kembali413 Entity Too Large
kesalahan jika ukuran header melebihi batas itu.
Pertanyaan terkait: Seberapa besar string agen pengguna bisa didapat?
Seperti yang dikatakan vartec di atas, spesifikasi HTTP tidak menentukan batas, namun banyak server melakukannya secara default. Ini berarti, secara praktis, batas bawah adalah 8K . Untuk sebagian besar server, batas ini berlaku untuk jumlah baris permintaan dan SEMUA bidang tajuk (jadi singkatkan cookie Anda).
Perlu dicatat bahwa nginx menggunakan ukuran halaman sistem secara default, yaitu 4K pada kebanyakan sistem. Anda dapat memeriksa dengan program kecil ini:
pagesize.c:
#include <unistd.h>
#include <stdio.h>
int main() {
int pageSize = getpagesize();
printf("Page size on your system = %i bytes\n", pageSize);
return 0;
}
Kompilasi dengan gcc -o pagesize pagesize.c
kemudian jalankan ./pagesize
. Server ubuntu saya dari Linode dengan patuh memberi tahu saya bahwa jawabannya adalah 4k.
LimitRequestLine
dan LimitRequestFieldSize
berlaku untuk setiap baris tajuk HTTP secara perorangan ... bukan "jumlah ..."
HTTP tidak menempatkan batas yang telah ditentukan pada panjang setiap bidang tajuk atau pada panjang bagian tajuk secara keseluruhan, seperti yang dijelaskan dalam Bagian 2.5. Berbagai batasan ad hoc pada panjang bidang tajuk individual ditemukan dalam praktik, seringkali tergantung pada semantik bidang tertentu.
Nilai HTTP Header dibatasi oleh implementasi server. Spesifikasi Http tidak membatasi ukuran tajuk.
Server yang menerima bidang tajuk permintaan, atau kumpulan bidang, lebih besar dari yang diinginkannya untuk memproses HARUS merespons dengan kode status 4xx (Kesalahan Klien) yang sesuai. Mengabaikan bidang header seperti itu akan meningkatkan kerentanan server untuk meminta serangan penyelundupan (Bagian 9.5).
Sebagian besar server akan kembali 413 Entity Too Large
atau sesuai kesalahan 4xx ketika ini terjadi.
Klien MUNGKIN membuang atau memotong bidang tajuk yang diterima yang lebih besar dari yang ingin diproses oleh klien jika semantik bidang sedemikian rupa sehingga nilai yang dijatuhkan dapat diabaikan dengan aman tanpa mengubah pembingkaian pesan atau semantik respons.
Ukuran header HTTP yang tidak tertutup membuat server terekspos terhadap serangan dan dapat menurunkan kapasitasnya untuk melayani lalu lintas organik.
Saya juga menemukan bahwa dalam beberapa kasus alasan 502/400 dalam kasus banyak header bisa jadi karena sejumlah besar header tanpa memperhatikan ukuran. dari dokumen
tune.http.maxhdr Menetapkan jumlah header maksimum dalam permintaan. Ketika permintaan datang dengan sejumlah tajuk yang lebih besar dari nilai ini (termasuk baris pertama), itu ditolak dengan kode status "400 Permintaan Buruk". Demikian pula, respons yang terlalu besar diblokir dengan "502 Bad Gateway". Nilai default adalah 101, yang cukup untuk semua penggunaan, mengingat bahwa server Apache yang digunakan secara luas menggunakan batas yang sama. Ini dapat berguna untuk mendorong batas ini lebih jauh untuk sementara waktu memungkinkan aplikasi kereta bekerja pada saat itu diperbaiki. Ingatlah bahwa setiap tajuk baru menghabiskan memori 32 bit untuk setiap sesi, jadi jangan memaksakan batas ini terlalu tinggi.
https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr