В чем разница между 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? Являются ли они одной и той же идеей, одинаковой функциональностью, просто используемой по-разному?

Ответ 1

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

Согласно Wikipedia:

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

и

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

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


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

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

Авторы услуг, которые используют протокол HTTP, НЕ ДОЛЖНЫ использовать формы, основанные на GET, для отправки конфиденциальных данных, поскольку это приведет к кодированию этих данных в Request-URI. Многие существующие серверы, прокси и пользовательские агенты будут регистрировать URI запроса в некотором месте, где это может быть видно третьим лицам. Серверы могут использовать отправку формы на основе POST


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

Ответ 2

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

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

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

Ответ 3

Изучите базовый протокол HTTP

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

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

Проверьте некоторые из них, а затем выполните поиск самостоятельно:

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Некоторые примеры:

  • ПОЛУЧИТЬ страницу, показывающую конкретный вопрос SO

  • ОТПРАВИТЬ комментарий

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

Ответ 7

С помощью POST вы также можете использовать многопрограммное кодирование mime, что означает, что вы также можете прикреплять файлы. Также, если вы используете почтовые переменные для навигации по страницам, пользователь получит предупреждение с просьбой повторно отправить параметр post. Как правило, они выглядят одинаково в HTTP-запросе, но вы должны просто придерживаться POST, если вам нужно "ПОЧТИ" что-то на сервере и "GET", если вам нужно ПОЛУЧИТЬ что-то из сервера, как и то, как они были предназначены.

Ответ 8

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