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.
| Aspect | HTTP 206 โ Partial Content | HTTP 304 โ Not Modified |
|---|---|---|
| Definition | Partial 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 summary | HTTP 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 use | HTTP 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 behavior | Client 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 behavior | See 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 impact | Search crawlers interpret 206 (success) for indexation and link equity accordingly. | Search crawlers interpret 304 (redirect-codes) for indexation and link equity accordingly. |
| API / backend impact | API 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 cause | Follow 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