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-urlencodedHTML-форма
multipart/form-dataс файлами
text/plainпростой текст
application/octet-streamбинарный blob
application/xmlXML/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 не дублирует запись.

См. также

← на главную