Семантика и ограничения HTTP GET и POST

Ранее на этой неделе мне пришлось сделать что-то похожее на нарушение семантики. Позволь мне объяснить.

Я делал простое клиентское приложение AJAX, которое должно было сделать запрос к сервису с заданным количеством параметров. Поскольку все приложение в основном доступно только для чтения, я подумал, что лучше использовать HTTP GET. Некоторые из параметров, которые мне приходилось передавать, были простыми (например, порядок сортировки или номер страницы).

Однако один из обязательных параметров мог иметь переменную длину, и это меня беспокоило. Поскольку я кодировал все параметры в строке запроса GET-запроса, мне казалось, что это устанавливает ненужный верхний предел (примерно) 2000 символов для URL-адреса запроса. И несмотря на это, мне не нравились URL-адреса запроса длиной в 500 символов.

Итак, поскольку запрос POST не имеет такого ограничения, я решил переключиться. Но это не кажется правильным. У меня сложилось впечатление, что POST означает изменение данных, но я использую его для простого запроса только для чтения.

Есть ли лучший способ сделать это? Чтобы выполнить GET со многими параметрами? Я слышал об одном методе, когда вы выполняете предварительный POST самих параметров, а затем выполняете GET. Но эта техника оставляет желать лучшего.

Но не обращая внимания на этот конкретный случай, какова реальная семантика и ограничения методов HTTP-запросов? И почему GET не поддерживает какую-либо полезную нагрузку параметров? Использование строки запроса в URL-адресе кажется мне хаком.

10
задан Community 23 May 2017 в 12:26
поделиться