226 IM Used
The server fulfilled a GET request, and the response is a result of one or more instance-manipulations applied to the current instance.
Meaning & Description
In practical terms, this is part of the Delta encoding in HTTP specification (RFC 3229). Instead of sending an entire updated file, a client can request just the differences (the delta) between the version it currently has cached and the version on the server. The client sends an `A-IM` (Accept Instance-Manipulation) header, and if the server supports delta encoding, it replies with a `226 IM Used` status and only the requested delta payload. This status code is exceedingly rare in the modern web.
Common Causes
- A client sent an `A-IM: vcdiff` (or similar) header alongside an `If-None-Match` header containing their current ETag, and the server successfully generated the delta payload.
How to fix a 226 error
- Ensure the `IM` header in the response perfectly matches the manipulation requested in the `A-IM` header.
- Verify that the delta payload can be successfully applied to the client's cached baseline without corruption.
- Confirm that the client is actually capable of parsing delta encodings like vcdiff or diffe.
Browser & SEO Behaviour
Browser Behavior
Modern browsers generally do not send A-IM headers or natively support HTTP delta encoding. It was never widely adopted in standard browsing.
SEO Impact
None. Search engine crawlers do not request delta encodings.
Code Examples
GET /large-dataset.json HTTP/1.1
Host: example.com
If-None-Match: "v1-baseline"
A-IM: vcdiffapp.get('/dataset', (req, res) => {
const aim = req.headers['a-im'];
const etag = req.headers['if-none-match'];
// Hypothetical scenario checking for delta support
if (aim === 'vcdiff' && etag === '"v1-baseline"') {
// In reality, you'd calculate the binary diff here
const deltaPayload = generateVcdiff(baselineData, currentData);
res.set({
'IM': 'vcdiff',
'ETag': '"v2-current"',
'Delta-Base': '"v1-baseline"',
'Content-Type': 'application/vcdiff'
});
return res.status(226).send(deltaPayload);
}
// Fallback to sending the full resource (200 OK)
res.json(currentData);
});from fastapi import Request, Response
@app.get("/dataset")
def get_dataset(request: Request):
aim = request.headers.get("A-IM")
etag = request.headers.get("If-None-Match")
if aim == "vcdiff" and etag == '"v1-baseline"':
delta_payload = b'...' # Simulated binary diff
headers = {
"IM": "vcdiff",
"ETag": '"v2-current"',
"Delta-Base": '"v1-baseline"'
}
return Response(content=delta_payload, status_code=226, media_type="application/vcdiff", headers=headers)
return {"data": "full_dataset"}func handleDataset(w http.ResponseWriter, r *http.Request) {
aim := r.Header.Get("A-IM")
etag := r.Header.Get("If-None-Match")
if aim == "vcdiff" && etag == `"v1-baseline"` {
w.Header().Set("IM", "vcdiff")
w.Header().Set("ETag", `"v2-current"`)
w.Header().Set("Delta-Base", `"v1-baseline"`)
w.Header().Set("Content-Type", "application/vcdiff")
w.WriteHeader(226)
w.Write([]byte("...delta payload..."))
return
}
w.WriteHeader(200)
w.Write([]byte("full dataset"))
}curl -i -H "A-IM: vcdiff" -H "If-None-Match: \"v1-baseline\"" https://example.com/dataRaw HTTP Response Example
HTTP/1.1 226 IM Used
Date: Sun, 12 Oct 2026 09:33:12 GMT
IM: vcdiff
ETag: "v2-hash"
Delta-Base: "v1-hash"
Content-Type: application/vcdiff
Content-Length: 104
[...binary vcdiff data...]Real-world Examples
Frequently Asked Questions
What does "IM Used" mean?
"IM" stands for Instance-Manipulation. It means the server manipulated (e.g., calculated the difference/delta of) the current instance of the resource against the client's cached version before sending it.
Why is 226 IM Used so rare?
Standard compression like gzip and Brotli became ubiquitous and highly efficient. The CPU overhead and complexity of maintaining version histories and calculating binary diffs on the fly for every client negated the bandwidth savings.
How is 226 different from 206 Partial Content?
206 Partial Content is used when a client specifically asks for byte ranges (e.g., bytes 100-200). 226 is used when the client asks for the *logical differences* between two versions of a file, regardless of where those differences occur.
How does the server know which version the client has?
The client must send an `If-None-Match` header with the ETag of their currently cached version, along with the `A-IM` header.
What happens if the server does not support delta encoding?
The server simply ignores the `A-IM` header and returns a standard `200 OK` with the full resource, just like any standard HTTP fallback.
Did You Know?
The specification for this (RFC 3229) was published in 2002 to solve dial-up bandwidth constraints, but hardware compression chips made standard gzip much faster shortly after.
Delta encoding at the HTTP layer requires the server to keep historical copies of files around just in case a client with an old version requests a diff.
The "vcdiff" format mentioned in the RFC is also an open standard (RFC 3284) designed specifically for encoding differences between files.
Developer Tips
- Do not attempt to implement RFC 3229 Delta Encoding in a modern web application. The complexity heavily outweighs the benefits compared to simply using Brotli compression over HTTP/2 or HTTP/3.
- If you are building an API where clients only need changes, use application-level logic (e.g., `/events?since=timestamp`) rather than HTTP-level delta encoding.
Interview Questions
These are questions you might face in a backend or API design interview that touch on HTTP 226.
What is HTTP Delta Encoding and which status code is associated with it?
Delta encoding allows a server to send only the differences between a client's cached version and the current version of a file. It is associated with the 226 IM Used status code.
Why did HTTP Delta Encoding (RFC 3229) fail to gain widespread adoption?
Because on-the-fly transport compression (gzip, later Brotli) became standard. Compression offered "good enough" bandwidth savings without the massive server-side complexity of tracking ETags, storing historical file versions, and computing binary diffs per request.
What headers are required for a client to request a delta encoded response?
The client must send an `If-None-Match` header (containing their current ETag) and an `A-IM` (Accept Instance-Manipulation) header indicating the diff formats they understand.
Common Interview Mistakes
- Confusing 226 IM Used (Delta encoding) with 206 Partial Content (Byte-range requests). They solve different problems: 206 fetches specific chunks, while 226 fetches differences between versions.
- Suggesting 226 IM Used as a modern architecture solution for a standard web app. It shows a lack of practical industry experience, as it is essentially a dead standard.