Мы собираем файлы cookie и применяемрекомендательные технологии

Методы GET и POST в HTTP: что это, как работают и чем они отличаются
Поддержка
Связаться с поддержкой
Личные кабинеты продуктов
ВОЙТИ
  • Разработка

Методы GET и POST в HTTP

Еще не оценен

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

Одна из первых спецификаций HTTP версии 0.9 формально содержала в себе только метод GET.

В HTTP 1.0 в дополнение к GET появились методы HEAD, POST, DELETE, LINK и UNLINK. Причём GET оставили для получения сущности (документа), а POST предназначался для передачи этого документа серверу. И хотя последующие версии протокола определяли и другие методы, при использовании браузера для доступа к веб-сайтам методы GET и POST — одни из максимально часто используемых.

Как работает метод GET

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

Начиная с версии HTTP 1.1, запрос иногда содержит некоторое количество заголовков, в которых может находиться дополнительная информация для сервера. Наиболее часто используемые заголовки: поддерживаемые клиентом языки (Accept-Language), URI предыдущего документа (Referer), соответствующий кнопке «Назад» в браузере, а также название и версия используемого клиента (User-Agent). GET-запрос не должен содержать тело, а сервер должен его игнорировать, если оно будет.

Метод GET не имеет побочных эффектов. Он идемпотентен — это означает, что многократное повторение запроса с GET эквивалентно однократному. Такое его качество даёт возможность кешировать ответы сервера, например, для снижения нагрузки на сеть.

Кроме того, можно применять GET для того, чтобы добавить данные формы (ключ — значение) к URL-адресу. Клиентской стороне необходимо лишь указать URL-адрес, для которого требуется доступ. Сервер получает запрос, обрабатывает и отправляет запрошенную информацию назад пользователю. Метод GET идеален для получения данных, безопасность которых не требуется.

Например, в Call Record API от МТС Exolve метод Download, применяемый для скачивания записи звонка, представляет собой GET-запрос.

Как работает метод POST

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

Отправка формы может быть реализована как GET, так и POST-запросом. Но если применять GET, информация из формы может быть передана только как часть URI, а большинство ПО (HTTP: клиенты, прокси, сервера) на длину URI накладывают более жёсткие требования, чем на длину самого запроса.

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

Также POST может содержать параметры не только как часть URI, но и в теле запроса.

Например, в Call Record API от МТС Exolve метод SetCallRecordState, используемый для включения или отключения записи звонков, представляет собой POST, в котором одна часть параметров передаётся в заголовках запроса, а другая — в его теле, в JSON-формате.

Различия между GET и POST

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

  • Видимость. При использовании GET мы должны указать параметры данных в URL-адресе, где они будут видны всем. И наоборот, метод POST требует от нас указания данных в теле HTTP-запроса, а не в URL-адресе. Следовательно, данные не видны.

  • Безопасность. Поскольку информация в URL-адресе открыта для всех, GET небезопасен. С другой стороны, POST обеспечивает безопасность, поскольку сохраняет параметры данных в теле HTTP-запроса, что предотвращает их попадание в закладки браузера. А так как POST-запросы не кешируются, данные не останутся в промежуточном прокси-сервере. Следовательно, он подходит для работы с теми из них, безопасность которых имеет значение.

  • Кеширование. Запросы GET можно кешировать. Это означает, что можно экономить трафик, время и уменьшать нагрузку на HTTP-сервер. Но это не относится к запросам POST, которые кешировать нельзя.

  • Состояние сервера. GET-запросы не могут менять данные на сервере, а лишь извлекают оттуда информацию. А используя POST-запросы, можно передавать данные на сервер для их обработки.

  • Объём передаваемых данных. Поскольку GET передаёт информацию через URL-адрес, её объём ограничен. В то время, как POST делает это в теле HTTP-запроса, позволяя передавать больше информации.

  • Тип данных. GET поддерживает только строковые данные, а POST — различные типы, включая числовые и двоичные.

  • Изменение состояния сервера. GET-запрос не изменяет состояния сервера. POST же может влиять на состояние сервера, так как он не идемпотентен. GET запрашивает данные из определённого ресурса, а POST может ещё запрашивать сервер создать или обновить ресурс.

  • Передача данных в HTTP. Поскольку во многих реализациях HTTP-серверов и HTTP-клиентов на длину URI наложены более строгие ограничения, чем на длину тела запроса, то передачу данных большой длины приходится осуществлять POST-запросом.

GET против POST: работа с отправкой формы

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

Метод GET

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

Например:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="page.php" method="GET">
<label for="fname">First name:</label>
<input type="text" id="fname" name="fname"><br><br>
<label for="lname">Last name:</label>
<input type="text" id="lname" name="lname"><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>

Метод POST

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

Например:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<form action="page.php" method="POST">
<label for="fname">First name:</label>
<input type="text" id="fname" name="fname"><br><br>
<label for="lname">Last name:</label>
<input type="text" id="lname" name="lname"><br><br>
<label for="pwd">Password:</label>
<input type="password" id="pwd" name="pwd">
<input type="submit" value="Submit">
</form>
</body>
</html>

Заключение

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

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

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

Оцените статью:
Предыдущая статья Следующая статья
Содержание статьи
Решения МТС Exolve
Модуль для авторизации
Подробнее
Все решения для финансов
Подробнее
Модуль для верификации
Подробнее
Решения МТС Exolve
Модуль для авторизации
Подробнее
Все решения для финансов
Подробнее
Модуль для верификации
Подробнее