Như đã nêu trong http://www.boutell.com/newfaq/misc/urllength.html , chuỗi truy vấn HTTP có độ dài giới hạn. Nó có thể bị giới hạn bởi máy khách (Firefox, IE, ...), máy chủ (Apache, IIS, ...) hoặc thiết bị mạng (tường lửa ứng dụng, ...).
Hôm nay tôi phải đối mặt với vấn đề này với một biểu mẫu tìm kiếm. Chúng tôi đã phát triển một biểu mẫu tìm kiếm với rất nhiều trường và biểu mẫu này được gửi đến máy chủ dưới dạng yêu cầu GET, vì vậy tôi có thể đánh dấu trang kết quả.
Chúng tôi có rất nhiều trường nên chuỗi truy vấn của chúng tôi dài 1100 byte và chúng tôi có tường lửa loại bỏ các yêu cầu HTTP GET với hơn 1024 byte. Quản trị viên hệ thống của chúng tôi khuyến nghị chúng tôi sử dụng POST để thay thế, vì vậy sẽ không có giới hạn.
Chắc chắn, POST sẽ hoạt động, nhưng tôi thực sự cảm thấy tìm kiếm là một NHẬN chứ không phải một ĐĂNG. Vì vậy, tôi nghĩ rằng tôi sẽ xem xét các tên trường của chúng tôi để đảm bảo chuỗi truy vấn không quá dài và nếu không thể, tôi sẽ thực dụng và sử dụng POST.
Nhưng có một lỗ hổng nào trong việc thiết kế các dịch vụ RESTful không? Nếu chúng tôi có độ dài giới hạn trong yêu cầu GET, tôi có thể làm thế nào để gửi các đối tượng lớn đến một dịch vụ web RESTful? Ví dụ, nếu tôi có một chương trình mà làm cho tính toán dựa trên một tập tin, và tôi muốn cung cấp một webservice RESTful như thế này: http://compute.com?content=<base64 file>
. Điều này sẽ không hoạt động vì chuỗi truy vấn có độ dài không giới hạn.
Tôi hơi khó hiểu ...