POST
POST — HTTP-метод для создания ресурса или отправки данных на обработку. НЕ idempotent (повторный POST = 2 записи в БД), НЕ кешируется по умолчанию, НЕ safe.
Пример
POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 45
Authorization: Bearer abc123
{"name":"Vasya","email":"v@example.com"}
# ответ
HTTP/1.1 201 Created
Location: /api/users/42
Content-Type: application/json
{"id":42,"name":"Vasya"}
Content-Type
| Тип | Что |
|---|---|
application/json | обычный API |
application/x-www-form-urlencoded | HTML-форма |
multipart/form-data | с файлами |
text/plain | простой текст |
application/octet-stream | бинарный blob |
application/xml | XML/SOAP |
multipart/form-data
POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC
------WebKitFormBoundaryABC
Content-Disposition: form-data; name="user"
Vasya
------WebKitFormBoundaryABC
Content-Disposition: form-data; name="avatar"; filename="me.jpg"
Content-Type: image/jpeg
<binary data>
------WebKitFormBoundaryABC--
POST vs PUT vs PATCH
| Метод | Idempotent | Для |
|---|---|---|
| POST | нет | создать (сервер выбирает ID) |
| PUT | да | заменить целиком по ID |
| PATCH | обычно да | частичное обновление |
Idempotency-Key
Чтобы дубль POST (retry, сеть моргнула) не создавал двух записей, клиент шлёт Idempotency-Key: uuid. Сервер запоминает и на повтор возвращает тот же результат. Stripe, Square, банки — все используют. См. idempotency.
Кеширование POST?
По умолчанию НЕ кешируется. Но если POST-ответ содержит Cache-Control с явными правилами — можно (редко используется).
POST/Redirect/GET (PRG)
Классический паттерн: после POST-формы сервер отвечает 303 See Other с Location → браузер делает GET. F5 не дублирует запись.