HTTP-методы: подробное объяснение
HTTP определяет девять стандартных методов запроса, но в повседневном трафике используются лишь некоторые. Таблица объясняет каждый метод, его безопасность и идемпотентность, а также коды успешного ответа.
| Метод | Назначение | Безопасный? | Идемпотентный? | Успешный статус |
|---|---|---|---|---|
| GET | Retrieve a resource | Yes | Yes | 200 OK |
| HEAD | Retrieve headers only, no body | Yes | Yes | 200 OK |
| POST | Create a resource or trigger an action | No | No | 201 Created |
| PUT | Replace a resource entirely | No | Yes | 200 OK / 204 No Content |
| PATCH | Apply a partial update | No | No | 200 OK |
| DELETE | Remove a resource | No | Yes | 200 OK / 204 No Content |
| OPTIONS | CORS preflight; list allowed methods | Yes | Yes | 204 / 200 OK |
| TRACE | Echo the request back for diagnostics | Yes | Yes | 200 OK |
| CONNECT | Open a tunnel, e.g. HTTPS via a proxy | No | No | 200 OK |
Примечания
- Безопасный метод никогда не меняет состояние сервера: только GET, HEAD, OPTIONS и TRACE являются безопасными.
- Идемпотентный метод при повторе даёт тот же результат, что и при одиночном вызове: это PUT, DELETE и GET, но не POST и PATCH.
- Если маршрут не поддерживает метод, сервер отвечает 405 Method Not Allowed и обычно включает заголовок Allow.
Частые вопросы
- В чём разница между GET и POST?
- GET получает ресурс без побочных эффектов и безопасен для повтора; параметры передаются в URL. POST создаёт что-то или запускает действие, может менять состояние и не должен повторяться вслепую.
- Что значит «безопасный» HTTP-метод?
- Безопасный метод никогда не меняет состояние сервера, поэтому его можно вызывать без риска. Безопасны GET, HEAD, OPTIONS и TRACE; POST, PUT, PATCH и DELETE — нет.
- В чём разница между PUT и PATCH?
- PUT заменяет весь ресурс тем, что вы отправляете; PATCH частично меняет только выбранные поля. PUT идемпотентен — повтор даёт тот же результат; PATCH, как правило, нет.
- Что делает метод HEAD?
- HEAD ведёт себя как GET, но не возвращает тело ответа. Он удобен для проверки существования ресурса, его размера или заголовков без загрузки всего содержимого.