201 Created
사용법
201 Created 상태 코드는 요청이 하나 이상의 새 리소스를 생성했을 때 반환됩니다. 보통 POST나 PUT 요청 뒤에 따라옵니다. 서버는 새로 생성된 리소스를 가리키는 Location 헤더를 포함합니다. Location 헤더가 없으면 생성된 리소스는 원래 요청에서 지정한 경로에 존재합니다.
참고
특정 URI에 리소스를 생성하는 PUT 요청도 201 Created를 반환합니다. 차이점은 PUT에서는 클라이언트가 대상 URI를 직접 지정하는 반면, POST에서는 서버가 URI를 결정한다는 점입니다.
명세는 201 응답에 본문을 허용합니다. REST 관례상 id, 타임스탬프, URI 같은 서버가 부여한 필드를 포함해 생성된 리소스의 표현을 반환합니다. 이렇게 하면 새 리소스를 가져오기 위한 후속 GET 요청이 필요 없습니다. Location 헤더는 새 리소스의 URI를 가리킵니다.
참고
201은 리소스가 즉시 생성되어 Location URI에서 사용할 수 있다는 뜻입니다. 202는 요청이 수락되었지만 처리가 아직 끝나지 않았다는 뜻으로, 비동기 워크플로와 큐에 적재된 작업에서 흔히 쓰입니다.
SEO 영향
Google은 201 응답의 콘텐츠를 잠시 기다린 뒤, 수신한 콘텐츠를 색인 파이프라인으로 전달합니다. 색인 등록이 보장되지는 않습니다.
예시
클라이언트가 /incoming/xml을 목적지 경로로 지정하여 XML 데이터를 서버에 업로드합니다. 서버는 데이터가 수락되었고 article_1.xml이라는 파일이 생성되었음을 확인해 주는 응답을 보냅니다.
요청
POST /incoming/xml HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 105
<?xml version="1.0"?>
<article>
<title>Test XML article</title>
<author>Anonymous</author>
</article>
응답
HTTP/1.1 201 Created
Location: /incoming/xml/article_1.xml
Content-Type: application/json
Content-Length: 18
{"success":"true"}
코드 참고
.NET
HttpStatusCode.Created
Rust
http::StatusCode::CREATED
Rails
:created
Go
http.StatusCreated
Symfony
Response::HTTP_CREATED
Python3.5+
http.HTTPStatus.CREATED
Java
java.net.HttpURLConnection.HTTP_CREATED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_CREATED
Angular
@angular/common/http/HttpStatusCode.Created