2009-05-01 42 views
425

Trình duyệt có phụ thuộc không? Ngoài ra, các ngăn xếp web khác nhau có giới hạn khác nhau về số lượng dữ liệu mà họ có thể nhận được từ yêu cầu không?Độ dài tối đa có thể có của chuỗi truy vấn là bao nhiêu?

+0

bạn cũng có thể kiểm tra http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-an-url – Xinus

+0

Nó chỉ dành cho các yêu cầu GET! Kích thước tối đa của các yêu cầu POST (có hoặc không có multipart/form-data) ở đây không xác định! – peterh

Trả lời

796

RFC 2616 (Giao thức truyền siêu văn bản - HTTP/1.1) tuyên bố không có giới hạn về độ dài của chuỗi truy vấn (phần 3.2.1). RFC 3986 cũng cho biết không có giới hạn, nhưng cho biết tên máy chủ được giới hạn trong 255 ký tự do các giới hạn DNS (phần 2.3.3).

Mặc dù thông số kỹ thuật không chỉ định bất kỳ độ dài tối đa nào, giới hạn thực tế được áp dụng bởi trình duyệt web và phần mềm máy chủ. Dựa trên những nghiên cứu tìm thấy tại Boutell.com:

  • Microsoft Internet Explorer (trình duyệt)
    Microsoft khẳng định rằng độ dài tối đa của một URL trong Internet Explorer là 2.083 ký tự, không có hơn 2.048 nhân vật trong đường dẫn một phần của URL. Nỗ lực sử dụng các URL dài hơn điều này đã tạo ra một thông báo lỗi rõ ràng trong Internet Explorer.

  • Microsoft Edge (Trình duyệt)
    Giới hạn có vẻ là khoảng 81578 ký tự. Xem URL Length limitation of Microsoft Edge

  • Chrome
    Nó dừng hiển thị URL sau 64k ký tự, nhưng có thể phục vụ hơn 100k ký tự. Không có thử nghiệm thêm nào được thực hiện ngoài đó.

  • Firefox (trình duyệt)
    Sau 65.536 ký tự, thanh địa chỉ không còn hiển thị URL trong Windows Firefox 1.5.x. Tuy nhiên, các URL dài hơn sẽ hoạt động. Không có thử nghiệm nào được thực hiện sau 100.000 ký tự.

  • Safari (Trình duyệt)
    Ít nhất 80.000 ký tự sẽ hoạt động. Thử nghiệm đã không được cố gắng vượt ra ngoài đó.

  • Opera (Trình duyệt)
    Ít nhất 190.000 ký tự sẽ hoạt động. Đã ngừng thử nghiệm sau 190.000 ký tự. Opera 9 dành cho Windows tiếp tục hiển thị toàn bộ URL có thể chỉnh sửa và có thể chỉnh sửa được trong thanh vị trí ngay cả ở 190.000 ký tự.

  • Apache (Server)
    nỗ lực sớm để đo chiều dài URL tối đa trong các trình duyệt web tình cờ gặp một giới hạn độ dài URL của máy chủ của khoảng 4.000 ký tự, sau đó Apache tạo ra một "413 Entity Too Large" lỗi. Bản cập nhật Apache hiện tại được tìm thấy trong Red Hat Enterprise Linux 4 đã được sử dụng. Tài liệu chính thức của Apache chỉ đề cập đến giới hạn 8,192 byte trên một trường riêng lẻ trong một yêu cầu.

  • Microsoft Internet Information Server (Server)
    Giới hạn mặc định là 16.384 ký tự (có, máy chủ web của Microsoft chấp nhận URL dài hơn trình duyệt web của Microsoft). Đây là cấu hình.

  • Perl HTTP :: Daemon (Máy chủ)
    Tối đa 8.000 byte sẽ hoạt động. Việc xây dựng các máy chủ ứng dụng web với mô-đun HTTP :: Daemon của Perl sẽ gặp phải giới hạn 16,384 byte đối với kích thước kết hợp của tất cả các tiêu đề yêu cầu HTTP. Điều này không bao gồm dữ liệu biểu mẫu POST, tệp tải lên, v.v. nhưng nó bao gồm URL. Trong thực tế, điều này dẫn đến lỗi 413 khi URL dài hơn đáng kể so với 8.000 ký tự. Giới hạn này có thể dễ dàng bị loại bỏ. Hãy tìm tất cả các lần xuất hiện của 16x1024 trong Daemon.pm và thay thế chúng bằng một giá trị lớn hơn. Tất nhiên, điều này làm tăng tiếp xúc của bạn với các cuộc tấn công từ chối dịch vụ.

+3

Tại sao bạn không nói số phiên bản thay vì "Microsoft Internet Explorer (Trình duyệt)"? – Lijo

+0

Cảm ơn bạn đã đếm số ký tự giới hạn thay vì byte hoặc thứ gì đó :) Dễ hiểu. – sun

+5

Dường như giới hạn IIS mặc định trên Chuỗi truy vấn nhỏ hơn đáng kể 16,384 ký tự - được trích dẫn là 2048 ở đây: https://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits – JTech

7

Tôi giả sử bạn có nghĩa là độ dài tối đa cho chuỗi uri. This có thể hữu ích.

Thường thì một khi URI không thể đọc được vì chúng quá dài, đã đến lúc sử dụng yêu cầu POST thay thế.

+38

Chuyển sang yêu cầu POST chỉ đơn giản là vì có quá nhiều dữ liệu để phù hợp với yêu cầu GET có ý nghĩa rất ít. –

+0

@Johannes Nếu GET không hoạt động, nhưng POST, thì tại sao nó không có ý nghĩa để chuyển sang POST? –

+8

@Eugene Beresovksy: Vì GET và POST có nghĩa là những thứ khác nhau (ref. [HTTP/1.1 specification] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html)). –

1

Ngăn xếp web khác nhau hỗ trợ các độ dài yêu cầu http khác nhau. Tôi biết từ kinh nghiệm rằng các ngăn xếp sớm của Safari chỉ hỗ trợ 4000 ký tự và do đó đã gặp khó khăn trong việc xử lý các trang ASP.net vì USER-STATE. Điều này thậm chí là cho POST, vì vậy bạn sẽ phải kiểm tra trình duyệt và xem giới hạn ngăn xếp là gì. Tôi nghĩ rằng bạn có thể đạt đến giới hạn ngay cả trên các trình duyệt mới hơn. Tôi không thể nhớ nhưng một trong số họ (IE6, tôi nghĩ) có giới hạn 16-bit, 32.768 hoặc một cái gì đó.

0

Mặc dù đã chính thức có được không có giới hạn, nhiều kiến ​​nghị cấu hình bảo mật nói rằng maxQueryStrings trên máy chủ nên được đặt một giới hạn ký tự tối đa 1024 trong khi toàn bộ url bao gồm chuỗi truy vấn nên được đặt thành một max 2048 nhân vật. Điều này là để ngăn chặn lỗ hổng HTTP Request Request chậm trên một máy chủ web để ngăn chặn các cuộc tấn công DDOS chậm.

Các vấn đề liên quan