2009-03-26 8 views
226

Có kích thước tối đa cho phép được chấp nhận cho tiêu đề HTTP không? Nếu vậy, nó là cái gì? Nếu không, đây có phải là một cái gì đó là máy chủ cụ thể hoặc là tiêu chuẩn được chấp nhận để cho phép các tiêu đề có kích thước không?Tối đa trên các giá trị tiêu đề http?

Trả lời

217

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à chúng chấp nhận. Ví dụ: Apache default limit là 8KB, trong IIS it's 16K. Máy chủ sẽ trả về lỗi 413 Entity Too Large nếu kích thước tiêu đề vượt quá giới hạn đó.

câu hỏi liên quan: How big can a user agent string get?

+8

Câu trả lời này nói rằng tối đa chấp nhận kích thước tiêu đề bởi máy chủ. Nhưng kích thước tiêu đề tối đa của máy chủ web (ví dụ: Apache) có khả năng gửi là bao nhiêu? – Pacerier

+0

@Pacerier: Đó là 8175 byte cho Apache có vẻ như, nhưng tôi vẫn đang tìm kiếm. Cũng không mong đợi để có được thông báo lỗi hữu ích nếu bạn chạy vào một giới hạn như vậy từ bất kỳ phụ trợ đó là. – hakre

+1

@hakre: IIRC, 8K cho toàn bộ dòng, đếm toàn bộ dòng tiêu đề (tên tiêu đề, không gian trắng và tiêu đề tải trọng). – vartec

167

Như vartec nói trên, spec HTTP không xác định một giới hạn, tuy nhiên nhiều máy chủ làm theo mặc định. Điều này có nghĩa là, thực tế 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 số của dòng yêu cầu và TẤT CẢ các trường tiêu đề (vì vậy hãy giữ cho cookie của bạn ngắn gọn).

Cần lưu ý rằng 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:

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

Compile với gcc -o pagesize pagesize.c sau đó chạy ./pagesize. Máy chủ ubuntu của tôi từ Linode dutifully thông báo cho tôi câu trả lời là 4k.

+12

+1 cho mã kiểm tra –

+5

Đối với apache2, độ dài URL được kiểm soát bởi 'LimitRequestLine' và' LimitRequestFieldSize' áp dụng cho từng dòng tiêu đề HTTP một cách khác nhau ... không phải là "tổng hợp ..." –

+1

Cookie có giới hạn kích thước _total_ riêng biệt trong số 4093 byte. http://stackoverflow.com/questions/640938/what-is-the-maximum-size-of-a-web-browsers-cookies-key –

4

HTTP không đặt một giới hạn xác định trước vào độ dài của từng lĩnh vực tiêu đề hoặc vào độ dài của phần tiêu đề như một toàn thể, như mô tả tại mục 2.5. Các giới hạn quảng cáo khác nhau trên tiêu đề riêng lẻ độ dài trường được tìm thấy trong thực tế, thường tùy thuộc vào ngữ nghĩa trường cụ thể.

HTTP Giá trị tiêu đề bị hạn chế bởi triển khai máy chủ. Đặc tả của Http không hạn chế kích thước tiêu đề.

Một máy chủ tiếp nhận một lĩnh vực tiêu đề yêu cầu, hoặc thiết lập các lĩnh vực, lớn hơn nó mong muốn xử lý phải đáp ứng với một mã trạng thái thích hợp 4xx (Client Lỗi). Bỏ qua các trường tiêu đề như vậy sẽ 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ả lại 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 xén các lĩnh vực tiêu đề nhận được lớn hơn so với khách hàng có nhu cầu xử lý nếu ngữ nghĩa lĩnh vực là như vậy mà giá trị giảm (s) có thể được bỏ qua một cách an toàn mà không thay đổi các khung tin nhắn hoặc ngữ nghĩa đáp ứng.

Kích thước tiêu đề HTTP chưa được ánh xạ giúp 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ân phát lưu lượng truy cập không phải trả tiền.

Source

0

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 nhiều tiêu đề có thể là do một số lượng lớn các tiêu đề mà không quan tâm đến kích thước. từ tài liệu

tune.http.maxhdr Đặt số lượng tiêu đề tối đa trong yêu cầu. Khi yêu cầu đi kèm với số lượng tiêu đề lớn hơn giá trị này (bao gồm cả dòng đầu tiên), nó là bị từ chối với mã trạng thái "Yêu cầu không hợp lệ 400". Tương tự, các phản hồi quá lớn bị chặn với "502 Bad Gateway". Giá trị mặc định là 101, đủ là cho tất cả các tập quán, xem xét rằng máy chủ Apache được triển khai rộng rãi sử dụng giới hạn tương tự . Nó có thể hữu ích để đẩy giới hạn này xa hơn để 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. Lưu ý rằng mỗi tiêu đềtiêu thụ mới 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