Câu trả lời:
Không, HTTP không xác định bất kỳ giới hạn nào. Tuy nhiên, hầu hết các máy chủ web đều giới hạn kích thước của các tiêu đề mà họ chấp nhận. Ví dụ: trong giới hạn mặc định của Apache là 8KB, trong IIS là 16K . Máy chủ sẽ trở lại413 Entity Too Large
lỗi nếu kích thước tiêu đề vượt quá giới hạn đó.
Câu hỏi liên quan: Làm thế nào lớn một chuỗi tác nhân người dùng có thể nhận được?
Như vartec đã nói ở trên, thông số HTTP không xác định giới hạn, tuy nhiên nhiều máy chủ thực hiện theo mặc định. Điều này có nghĩa, thực tế mà nói, giới hạn dưới là 8K . Đối với hầu hết các máy chủ, giới hạn này áp dụng cho tổng của dòng yêu cầu và TẤT CẢ các trường tiêu đề (vì vậy hãy giữ cookie của bạn ngắn).
Điều đáng chú ý là nginx sử dụng kích thước trang hệ thống theo mặc định, là 4K trên hầu hết các hệ thống. Bạn có thể kiểm tra với chương trình nhỏ này:
pageize.c:
#include <unistd.h>
#include <stdio.h>
int main() {
int pageSize = getpagesize();
printf("Page size on your system = %i bytes\n", pageSize);
return 0;
}
Biên dịch với gcc -o pagesize pagesize.c
sau đó chạy ./pagesize
. Máy chủ Ubuntu của tôi từ Linode đàng hoàng thông báo cho tôi câu trả lời là 4k.
LimitRequestLine
và LimitRequestFieldSize
áp dụng cho từng dòng tiêu đề HTTP một cách ngẫu nhiên ... không phải là "tổng của ..."
HTTP không đặt giới hạn được xác định trước về độ dài của từng trường tiêu đề hoặc trên toàn bộ chiều dài của phần tiêu đề, như được mô tả trong Phần 2.5. Các giới hạn ad hoc khác nhau về độ dài trường tiêu đề riêng lẻ được tìm thấy trong thực tế, thường phụ thuộc vào ngữ nghĩa trường cụ thể.
Giá trị HTTP Header bị hạn chế bởi việc triển khai máy chủ. Thông số kỹ thuật http không giới hạn kích thước tiêu đề.
Máy chủ nhận trường tiêu đề yêu cầu hoặc bộ trường lớn hơn yêu cầu xử lý PHẢI trả lời bằng mã trạng thái 4xx (Lỗi khách hàng) thích hợp. Bỏ qua các trường tiêu đề như vậy sẽ làm tăng tính dễ bị tổn thương của máy chủ để yêu cầu các cuộc tấn công buôn lậu (Mục 9.5).
Hầu hết các máy chủ sẽ trả về 413 Entity Too Large
hoặc lỗi 4xx thích hợp khi điều này xảy ra.
Một khách hàng CÓ THỂ loại bỏ hoặc cắt bớt các trường tiêu đề nhận được lớn hơn các máy khách muốn xử lý nếu ngữ nghĩa trường sao cho (các) giá trị bị bỏ qua có thể được bỏ qua một cách an toàn mà không thay đổi ngữ nghĩa khung hoặc thông báo phản hồi.
Kích thước tiêu đề HTTP chưa được mã hóa giữ cho máy chủ tiếp xúc với các cuộc tấn công và có thể giảm khả năng phục vụ lưu lượng truy cập không phải trả tiền.
Tôi cũng thấy rằng trong một số trường hợp, lý do cho 502/400 trong trường hợp có nhiều tiêu đề có thể là do một số lượng lớn các tiêu đề mà không liên quan đến kích thước. từ các tài liệu
Tune.http.maxhdr Đặt số lượng tiêu đề tối đa trong một yêu cầu. Khi một yêu cầu đi kèm với một số tiêu đề lớn hơn giá trị này (bao gồm cả dòng đầu tiên), nó sẽ bị từ chối với mã trạng thái "400 Yêu cầu xấu". Tương tự, các phản hồi quá lớn sẽ bị chặn với "502 Bad Gateway". Giá trị mặc định là 101, đủ cho tất cả các cách sử dụng, xem xét rằng máy chủ Apache được triển khai rộng rãi sử dụng cùng một giới hạn. Nó có thể hữu ích để đẩy giới hạn này hơn nữa để tạm thời cho phép một ứng dụng lỗi hoạt động vào thời điểm nó được sửa chữa. Hãy nhớ rằng mỗi tiêu đề mới tiêu tốn 32 bit bộ nhớ cho mỗi phiên, vì vậy đừng đẩy giới hạn này quá cao.
https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#3.2-tune.http.maxhdr