2011-11-23 34 views
5

Trong biểu mẫu nhiều phần (ví dụ: Content-Type=multipart/form-data), có giới hạn trên về độ dài của chuỗi ranh giới mà máy chủ HTTP nên chấp nhận không?Biểu mẫu nhiều phần HTML - độ dài tối đa của chuỗi "ranh giới"?

Theo như tôi có thể nói, các RFC liên quan nói 70 chars:

  • RFC2616 (HTTP/1.1) phần "3.7 Truyền thông loại" nói rằng các loại cho phép trong tiêu đề Content-Type là được xác định bởi RFC1590 (Quy trình đăng ký loại phương tiện).
  • RFC1590 cập nhật RFC-1521 (MIME).
  • RFC1521 nói rằng ranh giới "không được dài quá 70 ký tự, không tính hai dấu gạch ngang hàng đầu".
  • Văn bản tương tự cũng xuất hiện trong RFC2046 được cho là đã lỗi thời RFC1521.

Vì vậy, tôi có thể chắc chắn tất cả các trình duyệt HTTP/1.1 chính hiện có tuân theo giới hạn này không? Có bất kỳ trình duyệt nào (hoặc các ứng dụng/thư viện HTTP khác) được biết là phá vỡ giới hạn này không?

Có một số thông số kỹ thuật hoặc quy tắc chung khác của ngón tay cái mà tôi thiếu rằng chuỗi sẽ là ngắn hơn hơn 70 ký tự? Trong Chrome (ium) tôi nhận được một cái gì đó như thế này: ----WebKitFormBoundaryLu4dNSGEhJZUgoe5, mà rõ ràng là ngắn hơn 70 ký tự.

Tôi đang đặt câu hỏi này vì máy chủ của tôi đang chạy trong một môi trường bị hạn chế về bộ nhớ, vì vậy "đặt một bộ đệm đủ lớn để giữ toàn bộ chuỗi tiêu đề" không phải là câu trả lời lý tưởng.

+0

Bạn yêu cầu giới hạn trên. Tất nhiên có thể bạn không nhận được giới hạn đầy đủ trên nhưng ít hơn (liên quan đến ranh giới của Chrome). –

+0

sẽ không có vấn đề nếu bạn sử dụng AJAX và xử lý dữ liệu trong tệp PHP của bạn trực tiếp –

+0

"giữ toàn bộ chuỗi tiêu đề"? Tại sao toàn bộ tiêu đề, nếu bạn chỉ cần ranh giới? –

Trả lời

5

Khi bạn lưu ý, RFC 2046 cập nhật thông số MIME, nhưng giữ giới hạn của chuỗi ranh giới tối đa là 70 ký tự, không tính hai dấu gạch ngang hàng đầu.

Tôi nghĩ đó là một giả định hợp lý rằng thông số được theo sau bởi tất cả các trình duyệt chính (và tất cả các máy khách sử dụng MIME, như các chương trình thư) vì nếu không truyền dữ liệu nhiều phần thì sẽ rất nguy hiểm.

Để chắc chắn, tôi đã thực nghiệm kiểm chứng điều đó cho bạn sử dụng phiên bản mới nhất của:

  • curl: ----------------------------5a56a6c893f2 (40)
  • Chrome 30 (WebKit): ----WebKitFormBoundarym0vCJKBpUYdCIWQG (38)
  • Safari 6 (WebKit, và tương tự như Chrome): ----WebKitFormBoundaryFHUXvJBZwO2JKkNa (38)
  • FireFox 24: ---------------------------7096603861379320641089344535 (55)
  • IE 10: ---------------------------7dd1961640278 (40) - kỹ thuật tương tự như curl !
  • Apache HttpClient: -----------------------------1294919323195 (42)

Như vậy không chỉ mọi trình duyệt lớn/khách hàng phù hợp, nhưng tất cả sẽ cho phép bạn tiết kiệm 15 byte được phân bổ cho mỗi ranh giới mỗi đệm từ tối đa lý thuyết. Nếu bạn có thể chuyển đổi thường xuyên về tác nhân người dùng, bạn có thể ép hiệu suất cao hơn nữa.;-)

+0

Bật tác nhân người dùng? Bạn nghiêm túc chứ? –

+0

Không quá nghiêm trọng. – mjk

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