HTTP-методы

HTTP-метод (глагол) стоит первым в request-line: GET /users HTTP/1.1. Он говорит серверу что клиент хочет сделать с ресурсом. Определён в RFC 9110.

Основные девять

МетодИдемпотентSafeТело в запросеТело в ответеКэшируется
GETдаданетдада
HEADдаданетнет (только headers)да
POSTнетнетдадаредко
PUTданетдаданет
PATCHнет (обычно)нетдаданет
DELETEданетиногдаиногданет
OPTIONSдадаредкоданет
CONNECTнетдаданет
TRACEдаданетданет

Пояснения

GET

Получение ресурса. Не должно иметь тела запроса (можно, но не гарантируется что доставится). Параметры — в query-string: /search?q=foo.

GET /users/42 HTTP/1.1
Host: api.example.com
Accept: application/json

POST

Создание ресурса или произвольное действие. Не идемпотентен — повторный POST создаст ещё одну запись/отправит форму второй раз. Отсюда «Вы уверены что хотите повторить отправку формы?» в браузерах.

PUT vs POST vs PATCH

DELETE

Удаляет ресурс. Идемпотент: второй DELETE → 404, но эффект тот же (нет объекта).

HEAD

Как GET, но сервер возвращает только заголовки. Используется чтобы узнать размер файла, дату, ETag без скачивания. Все download-менеджеры делают HEAD перед скачиванием.

OPTIONS

Два применения:

CONNECT

Просит прокси-сервер открыть TCP-туннель к целевому серверу и стать «прозрачным». Стандартный способ прокачки HTTPS через HTTP-прокси:

CONNECT example.com:443 HTTP/1.1
Host: example.com

→ HTTP/1.1 200 OK

… далее чистый TLS-трафик через туннель …

Именно CONNECT позволяет прокси-серверу пропускать HTTPS без расшифровки. Также используется XHTTP и другими VPN-транспортами.

TRACE

Отражает запрос обратно клиенту — увидеть что промежуточные прокси сделали. Отключено везде из-за XST (Cross-Site Tracing) атаки — TRACE возвращал бы cookies/headers, которые JS не может прочитать.

Custom-методы (SEARCH, MKCOL, PROPFIND, LOCK)

WebDAV (RFC 4918) добавил кучу собственных методов для управления файлами. Экзотика, но живёт в NextCloud, iCloud, Microsoft SharePoint.

Тонкости

См. также