В чем разница между 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 ответов


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

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

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

и

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

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


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

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

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


Наконец, важное соображение при использовании 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 также делает, но они менее заметны).
  • POST может передавать гораздо больше информации на сервер и может быть практически любой длины.

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

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


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

примеры:

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

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

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


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


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