226 IM Used
使い方
226 IM Used レスポンスは、ボディが完全な表現ではなくリソースの変更後のバージョンを含んでいることをクライアントに伝えます。一般的な用途の1つはデルタエンコーディングで、キャッシュされたバージョンと現在のバージョンの差分のみを転送し、帯域を節約します。
サーバーは、クライアントが A-IM リクエストヘッダーを通じてサポートを宣言したインスタンス操作を適用します。受け入れられる操作は、1行にカンマ区切りで、または複数行にわたって列挙されます。
キャッシュ
226 IM Used レスポンスは、標準的なヒューリスティックキャッシュの一覧ではなく、独自の仕様で定義されたデルタキャッシュのルールに従います。このレスポンスは、キャッシュされたベースインスタンスと組み合わせて現在のインスタンスのキャッシュエントリを構築するために使用でき、標準の Cache-Control ディレクティブが存在する場合は引き続き適用されます。
変更されていない現在のインスタンスが常に直接利用できるとは限りません。完全なリソースを再構築するには、サーバーが適用したインスタンス操作に従って、226 レスポンスと以前にキャッシュされたベースインスタンスを組み合わせる必要があります。
例
クライアントは空のキャッシュから始め、PDF ファイルを要求します。Accept-Encoding ヘッダーは gzip 圧縮のサポートを示します。サーバーは gzip でエンコードされた完全なファイルと 200 ステータスで応答します。
次のリクエストでは、クライアントは最初のレスポンスの ETag 値を If-None-Match ヘッダーで送信して、ドキュメントが変更されたかどうかを確認します。クライアントはまた、A-IM ヘッダーを通じて vcdiff デルタエンコーディングのサポートを宣言します。
サーバーは元の ETag 以降にリソースが変更されたことを検出し、デルタファイルを生成します。リソースが変更されていない場合は代わりに 304 が返されます。レスポンスの Delta-Base ヘッダーは、デルタがどのキャッシュ済みバージョンに対して計算されたかを示します。IM ヘッダーには適用されたインスタンス操作が列挙されます。
リクエスト
GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
Accept-Encoding: gzip
レスポンス
HTTP/1.1 200 OK
ETag: "1234-000"
Content-Encoding: gzip
<gzip-compressed file>
リクエスト(2回目以降)
GET /livingdocs/current_specs.pdf HTTP/1.1
Host: example.com
If-None-Match: "1234-000"
Accept-Encoding: gzip
A-IM: vcdiff
レスポンス(デルタ)
HTTP/1.1 226 IM Used
ETag: "1234-111"
Delta-Base: "1234-000"
Content-Encoding: gzip
IM: vcdiff
<gzip-compressed delta file>
コードリファレンス
.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