Методы GET и POST. Использование и отличия

Рейтинг: 4 из 5, голосов 242
++++-

HTTP методы GET и POST используются для отправки данных на сервер.

Чаще всего методы используются в HTML формах, гиперссылках и AJAX запросах.

POST и GET запросы можно отправить на сервер с помощью любого программного обеспечения, работающего с протоколом HTTP.

Обработка запросов может отличаться в зависимости от типа сервера.

Большинство действующих сайтов работают с языком программирования PHP. В этом случае передаваемые данные попадают в суперглобальные массивы $_GET и $_POST.

Массивы $_GET и $_POST являются ассоциативными. Таким образом, переданный на сервер параметр с именем "user_name", будет доступен как $_GET['user_name'] или $_POST['user_name'] в зависимости от используемого метода.

Какой метод использовать GET или POST, чем отличаются методы

Основное отличие метода GET от POST в способе передачи данных.

Запрос GET передает данные в URL в виде пар "имя-значение" (другими словами, через ссылку), а запрос POST передает данные в теле запроса (подробно показано в примерах ниже). Это различие определяет свойства методов и ситуации, подходящие для использования того или иного HTTP метода.

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

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

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

HTTP метод POST поддерживает тип кодирования данных multipart/form-data, что позволяет передавать файлы.

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

В каких случаях использовать POST и когда нужно использовать GET

В таблице ниже показаны распространенные варианты использования HTTP запросов с объяснением в чем разница между GET и POST запросами в конкретной ситуации.

Ситуация GET POST
Фильтр товаров
Да

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

Нет

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

Форма авторизации
Нет

Отсутствует защита конфиденциальной информации. Введенный пароль будет виден в адресной строке браузера, будет сохранен в истории посещенных сайтов.

Да

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

Онлайн заявка

Оформления заказа

Форма обратной
связи

Нет

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

Да

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

Через гиперссылку
Да

Переход по гиперссылке с параметрами равнозначен отправке запроса через HTML форму.

Нет

Нет технической возможности поместить POST запрос в гиперссылку.

AJAX запросы Используются оба метода. Выбор зависит от контекста. Принципы выбора метода такие же, как и для HTML форм.

Сравнительная таблица HTTP методов GET и POST

В таблице ниже приведены основные свойства и отличия GET и POST методов.

Свойство GET POST
Способ передачи данных Через URL В теле HTTP запроса
Защита данных

Данные видны всем в адресной строке браузера, истории браузера и т.п.

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

Длина запроса

Не более 2048 символов

Не ограничена

Примечание: ограничения могут быть установлены сервером.

Сохранение в закладки

Страница с параметрами может быть добавлена в закладки

Страница с параметрами не может быть добавлена в закладки.

Кэширование Страница с параметрами может быть кэширована Страница с параметрами не может быть кэширована
Индексирование поисковыми системами Страница с параметрами может быть индексирована Страница с параметрами не может быть индексирована
Возможность отправки файлов Не поддерживается Поддерживается
Поддерживаемые типы кодирования application/x-www-form-urlencoded

application/x-www-form-urlencoded

multipart/form-data

text/plain

Использование в гиперссылках <a> Да Нет
Использование в HTML формах Да Да
Использование в AJAX запросах Да Да

Пример использования GET запроса

В примере показана простая HTML форма фильтра по нескольким параметрам.

HTML код формы, генерирующей GET запрос:

<form method="GET" name="filter" action="http://example.com/catalog/">
<p>Диагональ экрана</p>
<label><input type="radio" name="screen" value="4" checked> 4</label><br>
<label><input type="radio" name="screen" value="4.5"> 4.5</label><br>
<label><input type="radio" name="screen" value="5"> 5</label>
<p>Цвет</p>
<label><input type="checkbox" name="color_black" checked> Черный</label><br>
<label><input type="checkbox" name="color_white" checked> Белый</label><br>
<label><input type="checkbox" name="color_golden"> Золотой</label><br>
<input type="submit" value="Применить фильтр">
</form>

После отправки формы браузер переведет пользователя по ссылке:

http://example.com/catalog/?screen=4&color_black=on&color_white=on

Ссылка содержит URL документа, отвечающего за обработку и блок параметров. Знак "?" отмечает начало блока параметров GET запроса. Далее находятся пары "имя-значение", разделенные знаком "&". Имена параметров отделены от значений знаком "=".

Переход по ссылке, приведенной выше, будет равнозначен отправке формы с указанными параметрами.

Пример использования POST запроса

В примере показана простая HTML форма авторизации.

HTML код формы, генерирующей POST запрос:

<form method="POST" name="authorization" action="http://example.com/profile.php">
Логин: <input type="text" name="username"><br>
Пароль: <input type="password" name="user_password"><br>
<input type="submit" value="Войти">
</form>

После отправки формы браузер переведет пользователя по ссылке:

http://example.com/profile.php

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

Запрос состоит из области заголовков и тела запроса.

Код POST запроса

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

В теле запроса содержатся передаваемые параметры. Формат тела запроса может отличаться в зависимости от выбранного типа кодирования.

Оцените, насколько полезна эта страница
++++-
Комментарии
22 мая 2020 г.
Таня
Спасибо, коротко и ясно объяснили.
Ответить
09 февраля 2021 г.
Olga
spasibo!
Ответить
26 мая 2021 г.
Ната
А куда это вводить? txt документ, потом его переделать в http? в консоль? команда понятна, но вот НИГДЕ не написано а куда вводить, куда вбивать то? Не в воздух же...
Ответить
27 мая 2021 г.
Lebedev
Ната, HTTP — это протокол, простыми словами, правила передачи данных. Способ, которым вы будете передавать данные, уже будет зависеть от ваших целей. Обычно вручную этого не делают, исключением могут быть только GET запросы, их можно передать через адресную строку браузера. Что же касается POST запросов, приведу 2 распространенных варианта их использования. Первый - HTML формы. Например, человек заполняет поля формы заказа на сайте интернет-магазина, нажимает кнопку отправки, при этом генерируется POST запрос к серверу. Второй - использование библиотек. Например, генерация POST запроса с помощью библиотеки cURL для использования API стороннего сервера.
Ответить
24 ноября 2021 г.
Алена Косторная
можете попробовать через Postman
Ответить
10 июля 2021 г.
Максим
Просто и понятно!
Самая лучшая статься, которую встречал
Ответить
12 июля 2021 г.
Антон Банников
Повторное обращение по конечной ссылке не приведет к повторной обработке запроса с введенными ранее параметрами. Это для POST не приведет? Может наоборот?
Ответить
22 июля 2021 г.
Lebedev
Антон, в статье указано верно. При повторном переходе по конечной ссылке на сервер будут переданы только GET параметры запроса. Параметры POST передаются в теле запроса, соответственно, при переходе по конечной ссылке они будут утрачены.
Ответить
26 сентября 2021 г.
Татьяна
Спасибо огромное! Очень просто и ёмко написано. Как раз готовлюсь к собеседованию. Важная тема.
Ответить
07 ноября 2022 г.
Grigor
Very thanks
Ответить
Оставьте комментарий

Выберите правильный ответ
14 + 5 =
Отправляя форму, я даю согласие на обработку персональных данных.