POST

HTTP POST

안전 (Safe)아니오
멱등 (Idempotent)아니오
캐시 가능아니오
요청 본문
응답 본문

개요

POST는 서버에 데이터를 제출해 새 리소스를 만들거나 어떤 처리를 실행할 때 씁니다. 서버 상태를 바꾸므로 안전하지 않고(non-safe), 두 번 보내면 리소스가 두 개 생길 수 있어 멱등하지 않습니다(non-idempotent).

자세히

요청 본문에 담는 데이터의 형식은 `Content-Type` 헤더로 알립니다(`application/json`, `application/x-www-form-urlencoded`, `multipart/form-data` 등). 새 리소스를 만들면 201 Created와 함께 `Location` 헤더로 새 URL을 알려주는 것이 표준입니다.

POST는 멱등하지 않으므로 결제·주문 같은 동작에서 네트워크 재시도로 중복 생성이 일어날 수 있습니다. 이를 막으려면 클라이언트가 고유 키를 보내고 서버가 중복을 거르는 멱등 키(idempotency key) 패턴을 씁니다. 검증 실패는 422, 상태 충돌은 409로 응답합니다.

요청 / 응답 예시

요청
POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json

{ "name": "Ada" }
응답
HTTP/1.1 201 Created
Location: /api/users/42
Content-Type: application/json

{ "id": 42, "name": "Ada" }

코드로 보기

curl -X POST https://api.example.com/api/users \
  -H 'Content-Type: application/json' \
  -d '{"name":"Ada"}'
await fetch('/api/users', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ name: 'Ada' })
});
@app.post('/api/users')
def create_user():
    data = request.get_json()
    uid = db.insert(data)
    return jsonify(id=uid, **data), 201

흔한 실수

주로 함께 쓰는 상태코드

관련 메서드

관련 헤더