206 vs 304: Partial Content vs Not Modified

206 and 304 can look similar in logs, but they tell clients, crawlers, and API consumers different things.

AspectHTTP 206 โ€” Partial ContentHTTP 304 โ€” Not Modified
DefinitionPartial Content describes how the server processed the request and what the client should do next.Issued in response to a conditional GET (If-None-Match or If-Modified-Since). The server confirms the cached version is still valid, saving bandwidth by not resending the body.
Plain-language summaryHTTP 206 Partial Content indicates a success response outcome.The resource has not changed since the version the client already has cached. The server sends no body โ€” the client uses its cached copy. This is the conditional request success response, triggered by If-None-Match or If-Modified-Since request headers.
When to useHTTP 206 Partial Content indicates a success response outcome.You do not "choose" to return 304 โ€” it is issued automatically when the server honors a conditional GET. Implement 304 support by: setting ETag or Last-Modified headers on cacheable resources, validating the If-None-Match / If-Modified-Since headers in your server handler, and returning 304 (no body) when the resource is unchanged.
Client behaviorClient handles 206 according to success semantics.Client uses its cached copy of the resource. No new body is received. The response may include updated header fields (e.g., Cache-Control, Expires) to refresh the cache metadata. Browsers update cache freshness information and render the cached version.
Caching behaviorSee 206 caching spec.The core of HTTP conditional caching. Saves bandwidth by confirming the cached version is still valid. Works with ETags (content hash) or Last-Modified timestamps. Proxies and CDNs also honor these and may serve 304s from their own caches without hitting the origin.
SEO / crawler impactSearch crawlers interpret 206 (success) for indexation and link equity accordingly.Search crawlers interpret 304 (redirect-codes) for indexation and link equity accordingly.
API / backend impactAPI clients branching on 206 expect Partial Content semantics.API clients branching on 304 expect Not Modified semantics.
Safe to retry?Only after fixing the underlying causeFollow redirect, then retry original intent

Common real-world scenarios

When you see HTTP 206

206 appears in production when: Normal protocol behavior.

When you see HTTP 304

High 304 rates on static assets (JS, CSS, images) are healthy and expected โ€” this is efficient caching working correctly. Unexpected 304s on API endpoints that should always return fresh data indicate ETag generation is too conservative. Watch for: 304s on endpoints where the client always expects fresh data, and missing 304 support on cacheable static assets (wastes bandwidth).

Decision rule

Use 206 when the response should communicate partial content behavior; use 304 when not modified is the accurate protocol signal.

A frequent mistake is swapping 206 and 304 for convenience; that causes client retry bugs, incorrect cache signals, and misleading monitoring data.

Use 206 when the correct protocol signal is Partial Content. Use 304 when the correct signal is Not Modified. Returning either code for the wrong reason breaks client expectations, cache behavior, and monitoring accuracy.

FAQ

What is the biggest difference between 206 and 304?

206 communicates Partial Content, while 304 communicates Not Modified. Choosing the right one keeps clients and intermediaries predictable.

Do 206 and 304 have SEO or caching impact?

Yes. Search engines and caches interpret status classes differently. Use each code according to its semantics to avoid accidental indexing, stale responses, or crawl inefficiency.

Can APIs safely return 206 instead of 304?

Only when it matches contract semantics. API clients often branch logic by exact code, so swapping them can break retries, auth handling, or user-facing errors.

Full guides

HTTP 206 Partial Content โ€” full guide ยท HTTP 304 Not Modified โ€” full guide ยท All comparisons ยท HTTP 206 status reference ยท HTTP 304 status reference

Related comparisons