it-swarm.com.ru

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

359
Hristo

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

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

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

87
cHao

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

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

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

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

17
Victor Nicollet

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

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

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

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

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

13
Skilldrick

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

6
Matt Williamson

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

1
Activist