В чем разница между POST и GET? [duplicate]

На этот вопрос уже есть ответ:

I ' Мы только недавно начали работать с 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? Это та же идея, та же функциональность, просто используется по-другому?

370
задан nbro 25 July 2017 в 06:46
поделиться

7 ответов

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

Согласно Википедия :

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-адрес уникальным для каждого запроса, добавив временную метку.
426
ответ дан 23 November 2019 в 00:06
поделиться

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

1
ответ дан 23 November 2019 в 00:06
поделиться

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

6
ответ дан 23 November 2019 в 00:06
поделиться

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

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

17
ответ дан 23 November 2019 в 00:06
поделиться

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

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

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

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

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

93
ответ дан 23 November 2019 в 00:06
поделиться

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

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

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

  • РАЗМЕСТИТЬ комментарий

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

15
ответ дан 23 November 2019 в 00:06
поделиться
Другие вопросы по тегам:

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