Summary
- HTTP/1.0 already used 204 for a fulfilled request with no new information to display. The user agent was meant to keep the document view that caused the request rather than navigate or clear it.
- “No Content” does not mean “no state” or “no metadata.” Current semantics say response headers describe the target resource and its selected representation after the action; after PUT, an ETag can identify the newly saved representation.
- A 204 ends with its header section. It cannot contain content or trailers, and current HTTP forbids
Content-Length. The empty response boundary is protocol meaning, not an optional formatting preference.
Success did not always need a new page
Early Web interactions often joined two events: an action completed, then a new document appeared. That made sense for retrieval and for submissions whose result deserved a representation of its own. It was wasteful for another common pattern—change something, acknowledge the change and let the user continue working where they already were.
Consider an editor saving a document. The origin does not need to send the document back merely to prove that the save happened. Nor should success force the editor to leave the working surface. The useful result is smaller: the action completed; this is now the resource's version identity; continue.
HTTP 204 made that result explicit. It did not use an empty 200 and leave the interface semantics to guesswork. It assigned a status whose absence of response content was part of the contract.
That contract is why 204 is more than a bandwidth convenience. It separates successful state change from representation replacement.
HTTP/1.0 described continuity at the user agent
RFC 1945, published in May 1996, described 204 as a fulfilled request with no new information to send back. If the client was a user agent, it should not change the document view that generated the request.
The text named scripts and other actions as the primary use case. Input could take effect without displacing the active document. The response could still carry new metainformation in entity headers, and that information was meant to apply to the document already in view.
Two ideas were therefore present from the start. First, no new body did not weaken the claim of completion. Second, the existing view was not merely what happened to remain on screen; preserving it was intended behavior.
HTTP/1.0 also placed 204 among responses that must not include a body. The absence was structural, not a zero-byte representation chosen by accident.
HTTP/1.1 made the message boundary exact
RFC 2068 retained the view-in-place model in 1997 and stated that a 204 response must not include a message body. It ended at the first empty line after the header fields.
RFC 2616 refined the metadata language in 1999. A server had fulfilled the request, did not need to return an entity body and might return updated metainformation associated with the requested variant. A user agent should keep the current document view while applying that metadata to it.
The method definitions used 204 as a completed branch. An enacted DELETE with no representation describing the result could return 204. An existing resource successfully modified by PUT could return either 200 with a result representation or 204 without one.
This established an important contrast. A missing response body did not move the operation backward into uncertainty. The method had already crossed its completion boundary.
204 was not an empty 200
A zero-length 200 and a 204 can carry the same number of response-content octets. They do not make the same statement.
A typical 200 response is expected to contain content, even if framing says its length is zero. A 204 says that there is no additional response content because none is needed for the successful result. The status gives the absence a reason and tells generic components which framing and interface assumptions apply.
That distinction prevents a client from treating zero bytes as an accidentally missing representation. It also prevents a server from claiming 204 while quietly appending a status document.
Protocols become more reliable when absence has a type. A zero might be data. A 204 is a control result.
Headers described the world after the action
The 2014 RFC 7231 made the post-action reference clearer. Metadata in a 204 response refers to the target resource and its selected representation after the requested action was applied.
Its PUT example is compact and consequential. If a successful PUT receives 204 with an ETag, that ETag identifies the new representation of the target resource. The client can update the version marker of the document in its editor without downloading that document again.
The body is absent, but the result's identity is not. Date, cache controls and other applicable fields can still convey post-action facts. A client that discards every header because “204 means nothing” loses the very evidence needed for the next conditional save.
The distinction also prevents the ETag from being attached to the request payload merely by assumption. The response metadata names the selected representation after origin processing. If the origin transforms submitted content, the returned identity is about the resulting server state under the specification's conditions.
The active view remained, but it was allowed to learn
Keeping the document view does not mean freezing it in ignorance. The server assumes that the user agent will provide its own indication of success and apply new or updated response metadata to the active representation.
The origin therefore controls whether the action completed and which post-action metadata is authoritative. The user agent controls how success is shown locally and whether another retrieval is required for application purposes.
This split avoids two unnecessary transfers. The server need not echo the working document, and the client need not navigate to a confirmation page. Yet the client can still move its concurrency state forward using an ETag or other metadata.
The interface stays in place; the local model does not have to stay stale.
205 drew the opposite user-interface branch
HTTP 205 Reset Content is adjacent in the registry but opposite in one crucial respect. After a successful 205, the user agent is asked to reset the document view that caused the request, preparing it for another input action.
HTTP 204 does not request that reset. Its classic save action leaves the document available for continued editing. Treating 204 as 205 can erase local work, clear form state or move focus even though the server asked for none of those actions.
The two codes demonstrate why “both have no content” is an inadequate classification. Content absence is shared; interface control is not. Status semantics decide what should happen to the active surface after the headers end.
An implementation that maps every bodyless success to one generic UI branch throws away the distinction the protocol created.
202 marked a different time boundary
HTTP 202 Accepted is another superficially similar response: it can be concise and may not deliver the final business result. Its temporal claim is entirely different. A 202 says processing has been accepted but not completed and might never complete.
HTTP 204 says the request has been successfully fulfilled. Retrying it because “no content arrived” can duplicate an already enacted change. Conversely, sending 204 before asynchronous work is complete lies about the action's time boundary and deprives the client of a status-monitoring path.
The difference matters for idempotency, billing, deletion, publication and every other action whose repetition has consequences. Body length is not evidence of completion; the status is.
An empty network message can sit on either side of the commit line. 202 and 204 tell the client which side it is on.
The header section was the whole response
Current RFC 9110 states that 204 ends at the end of the header section and cannot contain content or trailers. A server must not send Content-Length in a 204 response.
This strict framing protects more than aesthetic cleanliness. On a persistent connection, unexpected bytes after a response whose semantics forbid content can be interpreted differently by recipients or confused with the next message. Parser disagreement at a boundary turns a harmless-looking success into a connection-level hazard.
Middleware that automatically appends JSON, a newline, a tracing footer or a default Content-Length: 0 therefore needs status-aware behavior. The response is complete when the headers end.
No-content semantics are enforced by where the next message is allowed to begin.
Heuristic cacheability did not erase method rules
RFC 7231 described 204 as cacheable by default. RFC 9110 uses the more precise phrase “heuristically cacheable,” unless the method definition or explicit cache controls say otherwise.
That sentence is easily overgeneralized. It does not mean every response to POST, PUT or DELETE can be stored and replayed against any later request. RFC 9111 keeps cache reuse tied to method semantics, cache keys, freshness and explicit controls.
The interesting cached entity is often the post-action response metadata, not a nonexistent body. Reusing it in the wrong request context can attach an ETag or policy state to the wrong operation.
Origins should therefore emit deliberate cache controls, especially for state-changing methods. Intermediaries must preserve method-aware keys and never treat “heuristically cacheable status” as a universal grant.
No content could still be too little
204 is appropriate only when the client does not require a response representation to continue correctly. A business operation may produce an identifier, receipt, recovery token, conflict explanation or next-step URI that the client actually needs. Hiding that result behind 204 is not elegant minimalism; it is an incomplete application contract.
The server decides whether post-action metadata is enough, but that decision must respect the application protocol agreed with the client. HTTP permits 204; it does not make every omitted result acceptable.
Likewise, the user agent can decide to fetch the target again if its local view needs canonicalized content. The status says navigation is not required by the response, not that another retrieval is forbidden.
Minimal transport works only when the missing bytes are genuinely redundant.
IANA preserves a very specific absence
The IANA HTTP Status Code Registry maps 204 No Content to RFC 9110 Section 15.3.5. The registration preserves the narrow combination of claims.
The action succeeded. There is no additional content in this response. Metadata describes the resource after the action. The current view need not be replaced. The message ends with its headers.
None of those claims means the resource is empty, missing or deleted. None means the client can ignore headers. None asks the interface to reset.
The name is short. The preserved semantics are not.
The save succeeded without taking over the screen
HTTP 204 is a protocol for restraint. The origin knows it has completed an action, but it does not insist on controlling the user's next view with a confirmation document. The user agent remains responsible for local feedback and continued work.
At the same time, restraint does not mean ambiguity. The status fixes completion, headers carry post-action identity, and framing fixes the exact boundary of absence.
This thin result became useful because each layer kept its authority. The server could save. The client could remain. The metadata could advance. The network could stop.
The page did not change because the protocol had nothing more to display—not because nothing had happened.
Member Briefing
Deeper Profile Context
Sign in with the right membership level to unlock the full briefing and source notes.
Only for Strategic Circle
Strategic Circle
Open to all readers. Unlock profile briefings after joining and signing in.
Join Strategic CircleOnly for Leadership Alliance
Leadership Alliance
For qualified IP-asset owners and management; sign in to unlock alliance briefings.
Join Leadership Alliance
