Рекомендации по параметрам HTTP GET и POST

Является ли плохой практикой выдавать следующий запрос POST:

/test?a=1&b=2
POST data: c=3&d=4

Обратите внимание, что 2 параметра являются частью URL-адреса и 2 параметра являются частью содержимого POST.

С другой стороны, все еще рекомендуется следующее правило:

  • GET-запрос: получить содержимое с сервера, но ничего не менять на сервере.
  • Запрос POST: отправка контента на сервер, который может изменить данные на сервере.

Я спрашиваю, потому что я вижу всего понемногу в Интернете.

Лоран Люс


person Laurent Luce    schedule 03.01.2010    source источник
comment
Да, люди по-прежнему считают, что вы должны использовать POST для всего, что может изменить данные, но я все еще думаю, что это полная чушь. Это заставляет вас делать некоторые действительно хакерские вещи, когда все, что вам нужно, это простая ссылка Удалить. Я думаю, что пока у вас есть надлежащие проверки на стороне сервера, чтобы веб-сканеры не испортили ваш сайт и тому подобное, это не имеет большого значения.   -  person mpen    schedule 03.01.2010
comment
Кроме того, смешивание методов параметров - это нормально, но я действительно не знаю, зачем вам это. С точки зрения программирования более разумно быть последовательным. Единственное исключение, о котором я могу думать, это формы входа в систему, иногда вы хотите перенаправить на страницу входа, а затем вы бросаете ссылку redirect_back_to_this_page в GET, и нет большого смысла копировать ее обратно в форму.   -  person mpen    schedule 03.01.2010


Ответы (4)


Да, ваши предположения верны. Вы должны быть последовательны в том, как вы передаете свои параметры или требуете передачи параметров, но на самом деле это не причинит никакого вреда.

Операции GET должны быть безопасными операциями, которые не вызывают никаких побочных эффектов (кроме кэширования и т. д.), поэтому они легко кэшируются прокси-серверами и т.п. С другой стороны, операции POST могут иметь побочные эффекты.

Я бы рекомендовал прочитать статью Википедии о протоколе HTTP:

ПОЛУЧАТЬ

Запрашивает представление указанного ресурса. Обратите внимание, что GET не следует использовать для операций, вызывающих побочные эффекты, например, для выполнения действий в веб-приложениях. Одна из причин этого заключается в том, что GET может произвольно использоваться роботами или поисковыми роботами, которым не нужно учитывать побочные эффекты, которые должен вызвать запрос. См. безопасные методы ниже.

СООБЩЕНИЕ

Отправляет данные для обработки (например, из HTML-формы) в указанный ресурс. Данные включаются в тело запроса. Это может привести к созданию нового ресурса или обновлению существующих ресурсов или к тому и другому.

Существуют и другие операции (например, HEAD, PUT, DELETE), и вам следует подумать об их использовании, если вы разрабатываете API. Они широко обсуждаются в дизайне RESTful API.

person notnoop    schedule 03.01.2010

Это правило, безусловно, по-прежнему рекомендуется.

Это отражено в поведении обновления современных браузеров. Они с радостью обновятся со значениями GET, но при обновлении POST появится диалоговое окно с предупреждением («вы уверены, что хотите отправить повторно?» и т. д.).

Похоже, вы пытались объединить два метода (GET и POST) ... путем отправки POST на URL-адрес со значениями GET. Хотя это должно работать нормально, обычно это не делается. Формы обычно используют исключительно либо одно, либо другое.

person user242275    schedule 03.01.2010

Да, следует соблюдать семантику GET и POST.

Учитывая этот факт, часто есть очень веская причина для помещения некоторых параметров в GET, а некоторых в переменные POST - рассмотрим случай, когда у вас есть веб-скрипт, который делает что-то вроде:

UPDATE datatable SET quantity=30 WHERE order=21559

Это может быть представлено как:

 /update?order=21559
 POST data: quantity=30

C.

person symcbean    schedule 07.01.2010

Там нет ничего плохого. Причина изменения данных должна быть отправлена ​​​​в POST, заключается в том, что вы не будете изменять данные снова, если пользователь нажмет кнопку «Обновить». В этом случае будет отправлена ​​только информация GET.

person Oren    schedule 03.01.2010
comment
Если человек нажимает кнопку «Обновить», а последней операцией была POST (как в этом запросе), он все равно, скорее всего, повторит операцию публикации. Если сервер не выдает перенаправление на операцию GET. - person notnoop; 03.01.2010
comment
он, вероятно, имел в виду закладки/индексацию поисковыми системами. Вы действительно не хотите, чтобы запросы на изменение данных индексировались... - person Itay Moav -Malimovka; 03.01.2010