HTTP-методы: GET, POST, PUT, PATCH, DELETE
Что такое HTTP-методы и для чего они нужны? Разбираем GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, CONNECT и TRACE, их назначение, отличия и примеры


При взаимодействии клиента и сервера важно не только указать, к какому ресурсу необходимо обратиться, но и какое действие требуется выполнить.
В этой статье рассмотрим специальные методы в HTTP.
HTTP-методы (HTTP Methods) это специальные обозначения, которые указывают на предполагаемое действие клиента по отношению к ресурсу.
Метод является частью стартовой строки HTTP-запроса и определяет его основную семантику.
В HTTP определено несколько стандартных методов, каждый из которых имеет своё назначение и особенности поведения.
Метод GET используется для получения представления ресурса.
Метод GET не предназначен для изменения состояния ресурса на сервере.
GET /api/users/15 HTTP/1.1
Host: example.com
Accept: application/jsonпример HTTP запроса с методом GET
Сервер может вернуть информацию о пользователе:
GET /api/users/15 HTTP/1.1
Host: example.com
Accept: application/jsonпример HTTP ответа на метод GET
Основные особенности GET:
используется для получения данных
не должен изменять состояние ресурса на сервере
является безопасным (Safe)
является идемпотентным (Idempotent)
может кэшироваться при соблюдении соответствующих условий
GET часто используется для получения списков, отдельных записей, информации о товарах и других ресурсов.
Метод POST используется для передачи данных ресурсу с целью выполнения определённой операции.
Метод POST часто применяется для создания новых ресурсов, но его назначение этим не ограничивается.
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Иван",
"email": "ivan@example.com"
}пример HTTP POST запроса для создания пользователя
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Иван",
"email": "ivan@example.com"
}пример HTTP ответа создания пользователя
Основные особенности POST:
используется для отправки данных на сервер
обычно применяется для создания ресурсов
может запускать определённые операции или бизнес-процессы
не является безопасным
не является идемпотентным по умолчанию
POST также используется для отправки форм, оформления заказов, авторизации и выполнения других операций.
Метод PUT используется для создания или полной замены представления ресурса по указанному адресу.
Если ресурс существует, сервер обычно заменяет его текущее представление переданными данными.
Если ресурса нет, сервер может создать его, если это допускается реализацией.
PUT /api/users/15 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Пётр",
"email": "petr@example.com"
}пример HTTP PUT запроса изменения пользователя
В примере выше клиент передаёт новое представление пользователя с идентификатором 15.
Основные особенности PUT:
используется для создания или полной замены ресурса
является идемпотентным
не является безопасным
повторная отправка одинакового запроса должна приводить к тому же предполагаемому результату, что и первая
PUT обычно предполагает полную замену представления ресурса, а не только некоторых полей.
Метод PATCH используется для частичного изменения ресурса.
В отличие от PUT, который обычно применяется для полной замены объекта, PATCH позволяет передать только те данные, которые необходимо изменить.
Пример:
PATCH /api/users/15 HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "Пётр"
}пример HTTP PATCH запроса изменения поля пользователя
В этом примере клиент изменяет только имя пользователя.
Остальные поля ресурса могут остаться без изменений.
Основные особенности PATCH:
используется для частичного изменения ресурса
не является безопасным
не является идемпотентным по умолчанию
семантика изменения зависит от формата передаваемых данных
Например, повторное применение операции увеличения баланса на определённую сумму может приводить к разным результатам.
При этом PATCH вполне может быть реализован и идемпотентным, если конкретная операция и формат запроса это обеспечивают.
Метод DELETE используется для удаления связи между ресурсом и его текущей функциональностью в рамках целевого адреса (URI).
На практике чаще всего применяется для удаления ресурса.
DELETE /api/users/15 HTTP/1.1
Host: example.comпример HTTP DELETE запроса удаления пользователя
Основные особенности DELETE:
используется для удаления ресурса
не является безопасным
является идемпотентным
повторный запрос DELETE не должен приводить к дополнительному изменению состояния по сравнению с первым успешным удалением
Код ответа на повторные запросы могут отличаться: первый может вернуть 204 No Content, а следующий 404 Not Found.
Метод HEAD работает аналогично GET, но сервер возвращает только заголовки ответа без тела сообщения.
HEAD /api/users/15 HTTP/1.1
Host: example.comпример HTTP HEAD запроса к ресурсу
Основные особенности HEAD:
позволяет получить метаданные ресурса
не возвращает тело ответа
является безопасным
является идемпотентным
может использоваться для проверки доступности ресурса или получения информации о его представлении
Например, HEAD может применяться для проверки размера файла или даты его последнего изменения.
Метод OPTIONS используется для получения информации о возможностях взаимодействия с сервером или конкретным ресурсом.
OPTIONS /api/users HTTP/1.1
Host: example.comпример HTTP OPTIONS запроса к ресурсу
Заголовок Allow указывает методы, поддерживаемые ресурсом.
Основные особенности OPTIONS:
позволяет узнать поддерживаемые возможности взаимодействия
является безопасным
является идемпотентным
используется в механизме CORS для предварительных запросов (Preflight)
Метод CONNECT используется для установления туннеля между клиентом и сервером через промежуточный узел.
Наиболее распространённый пример это создание защищённого HTTPS-соединения через HTTP-прокси.
CONNECT example.com:443 HTTP/1.1
Host: example.com:443пример HTTP CONNECT запроса
После успешного установления туннеля данные передаются через него без дальнейшей интерпретации HTTP-прокси.
CONNECT обычно используется в инфраструктуре прокси-серверов и не является типичным методом для работы с REST API.
Метод TRACE используется для диагностики передачи запроса по цепочке промежуточных компонентов.
Сервер возвращает полученное сообщение в теле ответа, позволяя увидеть, как запрос обрабатывался на пути к серверу.
TRACE / HTTP/1.1
Host: example.comпример HTTP TRACE запроса
Основные особенности:
предназначен для диагностики
является безопасным
является идемпотентным
часто отключается на серверах из соображений безопасности
TRACE практически не используется в повседневной разработке API.
При работе с HTTP важно понимать два понятия: безопасность (Safe) и идемпотентность (Idempotent).
Они определяют особенности поведения методов и помогают правильно проектировать взаимодействие клиента и сервера.
Безопасными называются методы, которые по своей семантике предназначены только для получения информации и не должны инициировать изменение состояния ресурса на сервере.
Например, GET позволяет получить информацию о пользователе, но не должен изменять его имя, электронную почту или другие данные.
К безопасным методам относятся:
GET
HEAD
OPTIONS
TRACE
Безопасный метод не означает, что сервер вообще бездействует, он свободен собирать статистику и выполнять другие внутренние действия, главное не менять объект к которому обратились.
Идемпотентность означает, что повторяя запросы много раз, результат такой же, как при одном запросе.
К идемпотентным методам относятся:
GET
HEAD
PUT
DELETE
OPTIONS
TRACE
POST и PATCH не являются идемпотентными по умолчанию.
DELETE /api/users/15 HTTP/1.1
Host: example.comпример повторной отправки запроса с удалением пользователя
При идемпотентности на пример выше удаления пользователя, повторный запрос не должен приводить к дополнительному удалению данных после того, как ресурс уже удалён.
При этом ответы сервера могут отличаться.
Идемпотентность относится к эффекту операции, а не к идентичности HTTP-ответов.
| Метод | Назначение | Безопасный | Идемпотентный |
|---|---|---|---|
| GET | Получение данных | Да | Да |
| POST | Отправка данных, выполнение операции | Нет | Нет |
| PUT | Создание или полная замена ресурса | Нет | Да |
| PATCH | Частичное изменение ресурса | Нет | Да/Нет |
| DELETE | Удаление ресурса | Нет | Да |
| HEAD | Получение заголовков без тела ответа | Да | Да |
| OPTIONS | Получение информации о возможностях | Да | Да |
| CONNECT | Установление туннеля | Нет | Нет |
| TRACE | Диагностика передачи запроса | Да | Да |
Если у вас остались вопросы по HTTP методам, вы можете обратиться за консультацией к программисту.





