226 IM Used
Penggunaan
Response 226 IM Used memberi tahu klien bahwa body berisi versi sumber daya yang telah dimodifikasi, bukan representasi utuhnya. Salah satu pemanfaatan yang umum adalah delta encoding, yaitu hanya perbedaan antara versi yang di-cache dan versi saat ini yang dikirimkan, sehingga menghemat bandwidth.
Server menerapkan instance manipulation yang dukungannya dinyatakan klien melalui header request A-IM. Manipulasi yang diterima dicantumkan dalam satu baris yang dipisahkan koma atau tersebar di beberapa baris.
Caching
Response 226 IM Used mengikuti aturan delta caching yang didefinisikan dalam spesifikasinya sendiri, bukan daftar caching heuristik standar. Response tersebut dapat digunakan bersama instance dasar yang tersimpan di cache untuk menyusun entri cache bagi instance saat ini, dan direktif Cache-Control standar tetap berlaku jika ada.
Instance saat ini dalam bentuk belum termodifikasi tidak selalu tersedia secara langsung. Merekonstruksi sumber daya utuh menuntut penggabungan response 226 dengan instance dasar yang sebelumnya di-cache, dengan berpedoman pada instance manipulation yang diterapkan server.
Contoh
Klien memulai dengan cache kosong dan meminta sebuah berkas PDF. Header Accept-Encoding menandakan dukungan terhadap kompresi gzip. Server merespons dengan berkas berenkode gzip secara utuh dan status 200.
Pada permintaan berikutnya, klien memeriksa apakah dokumen itu berubah dengan mengirimkan nilai ETag dari response pertama di dalam header If-None-Match. Klien juga menyatakan dukungan terhadap delta encoding vcdiff melalui header A-IM.
Server mendeteksi bahwa sumber daya telah berubah sejak ETag awal dan menghasilkan sebuah berkas delta. Sumber daya yang tidak berubah menghasilkan 304 sebagai gantinya. Header Delta-Base pada response mengidentifikasi versi cache mana yang menjadi dasar perhitungan delta tersebut. Header IM mencantumkan instance manipulation yang diterapkan.
Permintaan
GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
Accept-Encoding: gzip
Respons
HTTP/1.1 200 OK
ETag: "1234-000"
Content-Encoding: gzip
<gzip-compressed file>
Permintaan (berikutnya)
GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
If-None-Match: "1234-000"
Accept-Encoding: gzip
A-IM: vcdiff
Respons (delta)
HTTP/1.1 226 IM Used
ETag: "1234-111"
Delta-Base: "1234-000"
Content-Encoding: gzip
IM: vcdiff
<gzip-compressed delta file>
Referensi kode
.NET
HttpStatusCode.IMUsed
Rust
http::StatusCode::IM_USED
Rails
:im_used
Go
http.StatusIMUsed
Symfony
Response::HTTP_IM_USED
Python3.5+
http.HTTPStatus.IM_USED
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_IM_USED
Angular
@angular/common/http/HttpStatusCode.ImUsed