В чем разница между POST и GET? [дубликат]


этот вопрос уже есть ответ здесь:

Я только недавно начал заниматься PHP / AJAX / jQuery, и мне кажется, что важной частью этих технологий является POST и GET.

во-первых, в чем разница между POST и GET? Экспериментируя, я знаю, что GET добавляет возвращаемые переменные и их значения в строку URL

website.com/directory/index.php?name=YourName&bday=YourBday

но POST нет.

Итак, это единственное различие или есть конкретные правила или соглашения для использования одного или другого?

во-вторых, я также видел POST и GET вне PHP: также в AJAX и jQuery. Как же так POST и GET отличаются между этими 3? Являются ли они той же идеей, той же функциональностью, просто используются по-разному?

8 341

8 ответов:

GET и POST - это два разных типа HTTP-запросов.

по данным Википедия:

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

и

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

таким образом GET используется для извлечения удаленных данных, а POST используется для вставки/обновления удаленного данные.


Спецификация HTTP / 1.1 (RFC 2616) раздел 9 Определения Метода содержит дополнительную информацию о GET и POST а также другие методы http, если вы заинтересованы.

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

авторы услуг, которые используют Протокол HTTP не должен использовать GET based forms для отправки конфиденциальных данных, поскольку это приведет к кодированию этих данных в запросе-URI. Многие существующие серверы, прокси и агенты пользователей будут регистрировать URI запроса в каком-либо месте, где он может быть виден третьим лицам. Серверы могут использовать отправку формы на основе POST вместо


Наконец, важное соображение при использовании GET для AJAX запросов является то, что некоторые браузеры-IE в частности - будет кэшировать результаты GET запрос. Так что если вы, например, опрос с помощью того же GET запрос вы всегда получите обратно те же результаты, даже если данные, которые вы запрашиваете обновляется на стороне сервера. Один из способов решить эту проблему - сделать URL уникальным для каждого запроса, добавив метку времени.

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

кроме того, a POST означает, что запрос что-то изменит, и не должен быть переделан волей-неволей. Вот почему вы иногда видите, что ваш браузер спрашивает вас, Хотите ли вы повторно отправить данные формы, когда вы нажмете кнопку "Назад".

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

узнать подложку HTTP протокола

Это похоже на вождение автомобиля. Вы покупаете себе машину и едете по дороге, но вы не знаете ни одного из знаков, огней или других правил, которым вы должны подчиняться. Очевидно, что вы не в состоянии управлять автомобилем, даже если вы знаете, как управлять автомобилем. По крайней мере, не безопасно. Ни для себя, ни для других.

вы должны узнать немного о протоколе HTTP. GET/POST не связаны (по крайней мере, не напрямую) с PHP/AJAX / jQuery или подобным. Они используют потому что они используют протокол HTTP для общения. И есть гораздо больше для протокола HTTP, чем просто GET и POST.

проверьте некоторые из них, а затем поиск по своему усмотрению, а также:

пока не описание различий, ниже приведены несколько вещей, чтобы думать о При выборе правильного метода.

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

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

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

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

примеры:

  • получить страницу, показывающую конкретный вопрос SO

  • оставить комментарий

  • отправить запрос на публикацию, нажав кнопку" Добавить в корзину".

с помощью POST вы также можете выполнять многопартийное кодирование mime, что означает, что вы также можете прикреплять файлы. Кроме того, если вы используете переменные post для навигации по страницам, пользователь получит предупреждение с вопросом, хотят ли они повторно отправить параметр post. Обычно они выглядят одинаково в HTTP-запросе, но вы должны просто придерживаться POST, если вам нужно "опубликовать" что-то на сервере и "получить", если вам нужно получить что-то с сервера, как это было задумано.

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