Как указано в http://www.boutell.com/newfaq/misc/urllength.html, строка запроса HTTP имеет ограниченную длину. Он может быть ограничен клиентом (Firefox, IE,...), сервером (Apache, IIS,...) или сетевым оборудованием (прикладной брандмауэр,...).
Сегодня я сталкиваюсь с этой проблемой с формой поиска. Мы разработали форму поиска с большим количеством полей, и эта форма отправляется на сервер в виде запроса GET, поэтому я могу пометить результирующую страницу.
У нас так много полей, что наша строка запроса имеет длину 1100 байт, и у нас есть брандмауэр, который отбрасывает HTTP-запросы GET с более чем 1024 байтами. Наш системный администратор рекомендует использовать POST, чтобы не было никаких ограничений.
Конечно, POST будет работать, но я действительно чувствую поиск как GET, а не POST. Поэтому я думаю, что рассмотрю имена полей, чтобы гарантировать, что строка запроса не слишком длинная, и если я не могу, я буду прагматичным и использую POST.
Но есть ли недостаток в дизайне сервисов RESTful? Если мы имеем ограниченную длину в запросе GET, как я могу сделать, чтобы отправить большие объекты в веб-службу RESTful? Например, если у меня есть программа, которая производит вычисления на основе файла, и я хочу предоставить веб-сервис RESTful следующим образом: http://compute.com?content=<base64 file>
. Это не будет работать, потому что строка запроса не имеет неограниченной длины.
Я немного озадачен...