Когда вы используете POST и когда вы используете GET? - PullRequest
315 голосов
/ 05 сентября 2008

Из того, что я могу собрать, есть три категории:

  1. Никогда не используйте GET и используйте POST
  2. Никогда не используйте POST и используйте GET
  3. Неважно, какой вы используете.

Правильно ли я предположил эти три случая? Если да, то каковы примеры из каждого случая?

Ответы [ 27 ]

4 голосов
/ 29 августа 2013

1.3 Быстрый контрольный список для выбора HTTP GET или POST

Используйте GET, если:

    The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).

Используйте POST, если:

    The interaction is more like an order, or
    The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
    The user be held accountable for the results of the interaction.

Источник .

4 голосов
/ 15 февраля 2010

Вы ничего не можете сделать сами по себе. Дело в том, что вы не должны изменять состояние сервера в HTTP GET. Прокси-серверы HTTP предполагают, что поскольку HTTP GET не изменяет состояние, то не имеет значения, использует ли пользователь HTTP GET один раз или 1000 раз. Используя эту информацию, они предполагают, что безопасно вернуть кэшированную версию первого HTTP GET. Если вы нарушите HTTP-спецификацию, вы рискуете сломать HTTP-клиента и прокси-серверы. Не делай этого :)

4 голосов
/ 05 сентября 2008

Это затрагивает концепцию REST и то, как сеть была своего рода предназначена для использования. На радио Software Engineering есть отличный подкаст , в котором подробно рассказывается об использовании Get и Post.

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

Предполагается, что Post будет использоваться (по крайней мере, в архитектуре REST, на которой основывается сеть) для передачи информации на сервер / указания серверу выполнить действие. Примеры, такие как: обновить эти данные, создать эту запись.

3 голосов
/ 15 февраля 2010

С RFC 2616 :

9,3 GET
Метод GET означает получение любой информации (в форме субъект) идентифицируется Request-URI. Если запрос-URI ссылается для процесса производства данных, это произведенные данные, которые должны быть возвращены как субъект в ответе, а не исходный текст процесса, если этот текст является результатом процесс.

1011 *
*

9.5 POST
Метод POST используется для запроса исходного сервера принять лицо, заключенное в запрос в качестве нового подчиненного ресурс, идентифицируемый посредством Request-URI в строке запроса. POST разработан чтобы единообразный метод охватывал следующие функции:

  • Аннотация существующих ресурсов;
  • Публикация сообщения на доске объявлений, в группе новостей, списке рассылки или аналогичная группа статей;
  • Предоставление блока данных, такого как результат отправки формы, процесс обработки данных;
  • Расширение базы данных с помощью операции добавления.

Фактическая функция, выполняемая Метод POST определяется сервер и обычно зависит от Request-URI. Размещенный объект подчиняться этому URI в том же так, что файл подчинен каталог, содержащий его, новости статья подчинена группе новостей на котором он размещен, или запись подчиняться базе данных.

Действие, выполненное POST метод может не привести к ресурсу это можно определить по URI. В в этом случае либо 200 (ОК), либо 204 (Нет Содержание) является соответствующим ответом статус, в зависимости от того, ответ включает в себя объект, который описывает результат.

3 голосов
/ 15 февраля 2010

POST может перемещать большие данные, а GET - нет.

Но обычно речь идет не о недостатках GET, а о соглашении, если вы хотите, чтобы ваш веб-сайт / веб-приложение работало хорошо.

Посмотрите на http://www.w3.org/2001/tag/doc/whenToUseGet.html

3 голосов
/ 05 сентября 2008

Я не вижу проблемы с использованием get, я использую его для простых вещей, где имеет смысл сохранять вещи в строке запроса.

Использование его для обновления состояния - например, GET delete.php?id=5 для удаления страницы - очень рискованно. Люди узнали, что когда веб-акселератор Google начал предварительную выборку URL-адресов на страницах, он ударил по всем ссылкам «удалить» и уничтожил данные людей. То же самое может случиться с пауками поисковой системы.

2 голосов
/ 05 сентября 2008

Я использую POST, когда не хочу, чтобы люди видели QueryString или когда QueryString становится большим. Также POST необходим для загрузки файлов.

Я не вижу проблем с использованием GET, я использую его для простых вещей, где имеет смысл сохранять вещи в QueryString.

Использование GET позволит также ссылаться на определенную страницу, где POST не будет работать.

2 голосов
/ 27 ноября 2015

Простая версия POST GET PUT DELETE

  • используйте GET - когда вы хотите получить какой-либо ресурс, например, список данных на основе любого идентификатора или имени
  • использовать POST - когда вы хотите отправить какие-либо данные на сервер. имейте в виду, что POST - операция с большим весом, потому что для обновления мы должны использовать PUT вместо POST внутренне POST создаст новый ресурс
  • используйте PUT - когда вы
1 голос
/ 15 февраля 2010

В PHP предел данных POST обычно устанавливается вашим php.ini. Полагаю, GET ограничено настройками сервера / браузера - обычно около 255 байт.

1 голос
/ 15 февраля 2010

Прочитайте статью о HTTP в Википедии . Он объяснит, что это за протокол и что он делает:

GET

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

и

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

W3C имеет документ с именем URI, адресуемостью и использованием HTTP GET и POST , в котором объясняется, когда что использовать. Ссылаясь

1.3 Быстрый контрольный список для выбора HTTP GET или POST

  • Используйте GET, если:
    • Взаимодействие больше похоже на вопрос (т. Е. Это безопасная операция, такая как запрос, операция чтения или поиск).

и

  • Используйте POST, если:
    • Взаимодействие больше похоже на заказ, либо
    • Взаимодействие изменяет состояние ресурса так, как его воспринимает пользователь (например, подписка на услугу), или o Пользователь будет нести ответственность за результаты взаимодействия.

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

Практическим примером будет всякий раз, когда вы отправляете форму HTML. Вы указываете post или get для действия формы. PHP заполнит $ _GET и $ _POST соответственно.

...