Методы HTTP: GET, POST, PUT, DELETE, PATCH

Методы HTTP: GET, POST, PUT, DELETE, PATCH

Каждый HTTP-запрос начинается с метода — глагола, который говорит серверу, какое действие выполнить. Самые важные: GET — получить, POST — создать, PUT — обновить, DELETE — удалить, PATCH — частично обновить. Эти пять методов покрывают 99% всех операций в вебе.

GET: получить данные

GET — самый частый метод. Он запрашивает данные и не меняет состояние сервера. GET-запросы:

  • Не имеют тела (body).
  • Могут иметь query-параметры в URL: /search?q=http&page=2.
  • Кэшируются браузером и промежуточными прокси.
  • Могут быть закладками, передаваться в ссылках.
  • Идемпотентны: повторный запрос даёт тот же результат (не создаёт новых данных).
GET /articles/42 HTTP/1.1
Host: api.example.com

POST: создать данные

POST отправляет данные серверу для создания нового ресурса. POST-запросы:

  • Всегда имеют тело (body).
  • Не кэшируются по умолчанию.
  • Не идемпотентны: повторный POST создаст второй такой же ресурс.
  • Не могут быть закладками (нельзя сохранить POST-запрос).
POST /articles HTTP/1.1
Host: api.example.com
Content-Type: application/json

{"title": "Новая статья", "body": "Текст статьи..."}

Сервер обычно возвращает 201 Created и заголовок Location с URL созданного ресурса.

PUT: полностью заменить данные

PUT заменяет ресурс целиком. Если ресурс существует — обновляется, если нет — создаётся. PUT-запросы:

  • Содержат полное представление ресурса в теле.
  • Идемпотентны: повторный PUT с теми же данными даст тот же результат.
  • Принципиальное отличие от POST: PUT обращается к конкретному URL, а POST создаёт новый ресурс с URL, назначенным сервером.
PUT /articles/42 HTTP/1.1
Host: api.example.com
Content-Type: application/json

{"title": "Обновлённый заголовок", "body": "Новый текст..."}

Если тело PUT-запроса не содержит всех полей, недостающие поля обычно становятся null (именно поэтому PUT — полная замена, а не частичное обновление).

PATCH: частично обновить

PATCH обновляет только указанные поля ресурса. Не нужно отправлять весь объект — только изменяемые атрибуты:

PATCH /articles/42 HTTP/1.1
Host: api.example.com
Content-Type: application/json

{"title": "Только заголовок изменился"}

PATCH не обязательно идемпотентен (зависит от реализации). Он появился позже остальных методов и используется для экономии трафика при частичных обновлениях.

DELETE: удалить

DELETE удаляет ресурс. Обычно не имеет тела (хотя спецификация не запрещает). Идемпотентен: повторный DELETE того же ресурса либо снова вернёт 200 OK, либо 404 Not Found (ресурс уже удалён), что не меняет состояние.

DELETE /articles/42 HTTP/1.1
Host: api.example.com

Сводная таблица методов

МетодДействиеТело запросаТело ответаИдемпотентныйКэшируется
GETПолучитьНетДаДаДа
POSTСоздатьДаДаНетНет
PUTЗаменитьДаОбычно нетДаНет
PATCHОбновить частичноДаОбычно нетЗависитНет
DELETEУдалитьОбычно нетОбычно нетДаНет

Другие полезные методы

  • HEAD — то же, что GET, но сервер возвращает только заголовки без тела. Полезно для проверки существования ресурса без его загрузки.
  • OPTIONS — спрашивает, какие методы поддерживаются для URL. Используется в CORS.
  • CONNECT — устанавливает туннель (используется для HTTPS через прокси).
  • TRACE — диагностический метод, возвращает запрос обратно. Редко используется.

Как методы соотносятся с REST

Пять основных методов — это фундамент REST API (тема модуля 9). В правильно спроектированном API методы соответствуют CRUD-операциям:

CRUDHTTP-метод
CreatePOST
ReadGET
UpdatePUT (полное) / PATCH (частичное)
DeleteDELETE

Проверь себя

  1. Почему для создания нового ресурса используют POST, а не PUT?
  2. Какой метод использовать для обновления только email-адреса пользователя?
  3. Что вернёт сервер на повторный DELETE того же ресурса?
<details> <summary>Ответы</summary>
  1. POST создаёт ресурс, и сервер сам назначает ему URL (например, /articles/1001). PUT требует указания конкретного URL — клиент должен знать идентификатор до создания, что не всегда возможно.
  2. PATCH. Он позволяет отправить только изменяемое поле {"email": "new@example.com"}, не передавая весь объект пользователя.
  3. Вероятно, 404 Not Found — ресурс уже удалён. Это нормально: DELETE идемпотентен, повторный запрос не вызывает ошибку.
</details>

Что унести с урока

  • GET — получить, POST — создать, PUT — полностью заменить, PATCH — частично обновить, DELETE — удалить.
  • GET-запросы кэшируются и могут быть закладками. POST — нет.
  • Идемпотентность: GET, PUT, DELETE — да. POST — нет. PATCH — зависит.
  • Методы соответствуют CRUD: Create→POST, Read→GET, Update→PUT/PATCH, Delete→DELETE.
  • HEAD и OPTIONS — служебные методы для диагностики и CORS.

Модуль «Основы HTTP» завершён. Мы знаем, как клиент и сервер общаются. В следующем модуле углубимся в HTTP: разберём коды статуса, заголовки, cookies и кэширование.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике