204 No Content
사용법
204 No Content 상태 코드는 메시지 본문이 필요하지 않은 POST, PUT, DELETE 작업에 대한 응답으로 반환됩니다. 일부 서버는 대신 빈 본문과 Content-Length: 0을 담은 200을 반환하기도 합니다.
실용적인 사용 사례는 사용자가 “저장” 버튼을 누르는 폼 제출의 결과입니다. 서버는 변경 사항을 커밋하고, 성공 여부를 사용자에게 알리는 일은 클라이언트에 맡깁니다.
서버는 204 응답에 메시지 본문을 포함해서는 안 됩니다. Cache-Control이나 ETag 같은 헤더는 여전히 전송되며, 요청이 지정한 문서에 적용됩니다.
이와 관련된 205 Reset Content 상태 역시 본문을 반환하지 않지만, 추가로 클라이언트에게 문서 뷰를 초기화하도록(예: 제출 후 폼 비우기) 지시합니다. 조건부 GET은 리소스를 다시 가져올 필요가 없음을 알리기 위해 304를 반환합니다.
참고
DELETE가 204를 반환하는 것은 응답 본문이 필요 없는 단순한 리소스 삭제에서 가장 흔한 패턴입니다. 응답에 확인 정보나 삭제된 리소스의 표현이 포함될 때는 대신 200을 반환합니다. PUT이 204를 반환하는 것은 업데이트가 성공했고 클라이언트가 갱신된 표현을 되돌려받을 필요가 없을 때 흔합니다. 204는 “성공했지만 보여줄 것이 없음”을 뜻하고, 404는 “리소스를 찾을 수 없음”을 뜻합니다. 비어 있는 컬렉션을 조회하면 204가 아니라 빈 배열과 함께 200을 반환합니다.
SEO 영향
수신되는 콘텐츠가 없으므로 Google은 204 응답을 처리할 수 없습니다. 계속해서 204를 반환하는 URL은 검색 결과에 나타나지 않습니다.
예시
클라이언트가 작업을 정의하는 XML 데이터를 서버에 POST합니다. 서버는 데이터가 수락되었고 작업이 완료되었음을 확인해 주는 응답을 보냅니다. 반환할 콘텐츠가 없으므로 204 No Content 상태 코드가 적절합니다.
요청
POST /job HTTP/1.1
Host: example.com
Content-Type: application/xml
Content-Length: 68
<?xml version="1.0"?>
<job>
<id>125</id>
<task>G01</task>
</job>
응답
HTTP/1.1 204 No Content
코드 참고
.NET
HttpStatusCode.NoContent
Rust
http::StatusCode::NO_CONTENT
Rails
:no_content
Go
http.StatusNoContent
Symfony
Response::HTTP_NO_CONTENT
Python3.5+
http.HTTPStatus.NO_CONTENT
Java
java.net.HttpURLConnection.HTTP_NO_CONTENT
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_NO_CONTENT
Angular
@angular/common/http/HttpStatusCode.NoContent