Почему я должен POST данные, а не GET?

Я знаю, что вы не хотите размещать форму с именем пользователя и паролем, где любой может использовать историю для просмотра или ситуации, когда повторные действия могут быть нежелательны (обновление страницы = добавление товара в корзину может быть нежелательным по желанию). Так что у меня есть понимание, когда я могу использовать один поверх другого. Но я всегда мог заставить сервер перенаправить URL после GET, чтобы обойти проблему корзины, и, возможно, большинство моих форм будут отлично работать с GET.

Почему я должен использовать POST вместо GET? Я не понимаю преимущества одного над другим. Я заметил, что POST не добавляет данные в историю /URL-адрес и предупреждает вас об обновлении страницы, но это единственные два различия, которые я знаю. Почему в качестве разработчика я могу использовать один поверх другого?

14 голосов | спросил 3 revs, 2 users 75%
user34537
1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

5 ответов


0

Каждый метод HTTP: POST, GET, PUT, DELETE и т. д. имеет свою семантику. При выборе правильного метода важно понимать HTTP и REST , так как это путь HTTP должен был работать и работать с базовой сетевой инфраструктурой.

Хорошее руководство по REST доступно здесь здесь . Вот что говорит о методах POST и GET:

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

    Гарантия идемпотентности означает, что вы можете просто повторно выполнить запрос . Идемпотентность также гарантируется для PUT (что в основном означает «обновить этот ресурс этими данными или создать его по этому URI, если его там еще нет») и для DELETE (которую вы можете просто попробовать снова и снова, пока не получите результат - удаление то, чего нет, не проблема). POST, что обычно означает «создать новый ресурс», также может использоваться для вызова произвольной обработки и, следовательно, не является ни безопасным, ни идемпотентным .

ответил Dan 1 J0000006Europe/Moscow 2010, 02:58:56
0

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

Помимо технических различий, есть еще и намерение. Стандарт HTTP описывает способы выполнения различных запросов (GET, POST, PUT, DELETE, HEAD) предназначены для использования; например, PUT предназначен для добавления ресурса, DELETE предназначен для его удаления, а POST предназначен для его изменения. Не могли бы вы использовать запрос GET вместо PUT или DELETE? Конечно, но следование стандартам делает намерение явным.

См. http://www.w3.org/Protocols/rfc2616/rfc2616. -sec9.html для получения дополнительной информации.

ответил danben 1 J0000006Europe/Moscow 2010, 02:50:54
0

Если вы хотите идемпотентный URI запроса (т.е. ответ всегда то же самое), затем используйте GET, иначе POST.

ответил BalusC 1 J0000006Europe/Moscow 2010, 02:53:46
0

Помимо прочего, GET ограничен 2 КБ (некоторые браузеры могут принимать больше), и он виден в URL

ответил SQLMenace 1 J0000006Europe/Moscow 2010, 02:52:11
0

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

Вся эта сеть связана с этой семантикой. Кэшировать GET-запрос безопасно, но не команду POST - так делают кеширующие прокси. Безопасно получать ресурс несколько раз, поэтому у вас есть средства предварительной выборки ссылок, которые делают именно это. Безопасно создавать закладки и обновлять GET, поэтому нет предупреждений от браузеров и т. Д. И т. Д.

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

ответил Mark Brackett 1 J0000006Europe/Moscow 2010, 03:02:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132