HTTP//IM

実現値操作 (HTTP)

[8] 実現値操作 (instance manipulation) は、実現値に対する種々の操作を表します。

仕様書

意味

[4] 実現値操作は、1つ以上の実現値に対する操作であって、 結果としてある実現値が部分部分で、あるいは複数の応答としてからクライアントへと伝搬されることとなるであろうものをいいます >>3, >>42

[27] 具体的には、差分符号化圧縮範囲選択が含まれています。

[35] 差分符号化は、2入力の実現値操作です。 圧縮範囲選択は、1入力の実現値操作です。 >>36

[43] むやみに圧縮すると危険かもしれません。内容符号化圧縮の項や BREACH攻撃を参照。

構文

[21] 実現値操作は、名前と0個以上の引数 >>16 によって識別できます。 引数の前には ; が必要です >>16

[22] 仕様書上では0個か1個の引数になっていますが、 誤りのように見えます。
[23] 仕様書の時代的に構文上空白が明記されていませんが、 ; の前後に OWS が挿入できると思われます。

[24] 実現値操作の名前は、字句です >>16大文字・小文字不区別と思われます。

  1. 字句
  2. *
    1. OWS
    2. ;
    3. OWS
    4. 引数

[28] 引数は、名前か、名前と = と値のいずれかです >>16

[29] 引数の名前は、字句です >>16大文字・小文字不区別と思われます。

[30] 引数の値は字句または引用文字列です >>16

  1. 字句
  2. ?
    1. =
    2. |
      1. 字句
      2. 引用文字列

[31] 引数の名前は、q値と区別するため、 q であってはなりません >>16

文脈

[2] 実現値操作の指定の構文は、 IM: ヘッダーA-IM: ヘッダーで使います。

適用順序

[11] 範囲を選択してから差分を得たいこととと差分範囲を得たいこと、 あるいは差分圧縮したいことや圧縮状態の差分を得たいことがあるなど、 各種操作の適用順序は状況に依存することから、 A-IM:/IM: ヘッダーによって操作の適用順序を記述できます >>9

[12] 範囲の選択は、 HTTP の標準の範囲要求の機能を適用するタイミングを指定するものとなります。 圧縮は既に内容符号化にも (転送符号化にも) 組み込まれていますが、 それとは別に実現値操作としても指定できることになっています。
[1] IM:, A-IM: も参照。

[34] 範囲 (range) の後に他の実現値操作を適用することも認められています。 multipart/byteranges で複数に分かれた後に適用される可能性もあります。

処理モデル

[38] 適用する実現値操作の決定については、 A-IM: を参照。

[37] キャッシュにおける処理については、226 を参照。

[39] 個々の実現値操作の処理については、差分符号化を参照。

実現値操作の一覧

[13] 次の実現値操作の名前があります。

[19] IANA登録簿 >>17 があります >>16

[20] が、 RFC 3229 のもの以外は登録されていません。

[15] 名前に「diff」が入った3つは特に差分符号化と呼ばれています >>16

歴史

RFC 3229

[5] RFC 3229 (差分符号化) 用語定義より抜粋

instance manipulation
An operation on one or more instances which may result in an instance being conveyed from server to client in parts, or in more than one response message. For example, a range selection or a delta encoding. Instance manipulations are end-to-end, and often involve the use of a cache at the client.
実現値操作
一つ以上の実現値についての演算であり、 結果として一つの実現値がからクライアントに部分的に、または複数の要求メッセージによって運ばれてくることになるかもしれない。 例えば、範囲選択や差分符号化である。 実現値操作は末端対末端であり、しばしばクライアントでのキャッシュの使用を伴う。

For reasons that will become clear later on, it is convenient to think about subrange selection as a form of instance manipulation. In some contexts, compression might also be treated as an instance manipulation, rather than as a content-coding or transfer-coding.

後々明らかになってくる理由から、部分範囲選択を実現値操作の一形式と考えると便利です。 文脈によっては、圧縮もまた内容符号化転送符号化ではなく実現値操作として扱われるかもしれません。

[7] RFC 3229 (差分符号化) 10.1 Protocol parameter specifications

This specification defines a new HTTP parameter type, an instance-manipulation:

この仕様書は新しい HTTP 引数型 instance-manipulation を定義します。

  • instance-manipulation = token [imparams]
  • imparams = ";" imparam-name [ "=" ( token | quoted-string ) ]
  • imparam-name = token

Note that the imparam-name MUST NOT be "q", to avoid ambiguity with the use of qvalues (see [10]).

imparam-nameqvalue の使用時の曖昧性を避けるために q であってはならないことに注意して下さい。

The set of instance-manipulation values is initially:

- vcdiff
A delta using the "vcdiff" encoding format [19, 20].
- diffe
The output of the UNIX "diff -e" command [26].
- gdiff
The GDIFF encoding format [14].
- gzip
Same definition as the HTTP "gzip" content-coding.
- deflate
Same definition as the HTTP "deflate" content-coding.
- range
A token indicating that the result is partial content, as the result of a range selection.
- identity
A token used only in the A-IM header (not in the IM header), to indicate whether or not the identity instance-manipulation is acceptable.

最初の実現値操作の集合は:

vcdiff
vcdiff 符号化書式を用いた差分。
diffe
UNIX diff -e 命令の出力。
gdiff
GDIFF 符号化書式。
gzip
HTTP gzip 内容符号化と同じ定義。
deflate
HTTP deflate 内容符号化と同じ定義。
range
結果が範囲選択の結果である部分内容であることを示す字句。
identity
A-IM 頭でのみ使用する (IM 頭では使用しない) 字句で、 同一実現値操作を受入れるかどうかを示すために使用する。

For convenience in the rest of this specification, we define a subset of instance-manipulation values as delta-coding values:

この仕様書の後の部分での便宜のために、実現値操作の部分集合を delta-coding (差分符号化) 値として定義します。

  • delta-coding = "vcdiff" | "diffe" | "gdiff" | token

Future instance-manipulation values might also be included in this list.

将来の実現値操作値もこの並びに含められるかもしれません。

[6] RFC 3229 (差分符号化) 10.2 IANA Considerations

The Internet Assigned Numbers Authority (IANA) administers the name space for instance-manipulation values. Values and their meaning must be documented in an RFC or other peer-reviewed, permanent, and readily available reference, in sufficient detail so that interoperability between independent implementations is possible. Subject to these constraints, name assignments are First Come, First Served (see RFC 2434 [25]).

インターネット割当て番号事務局 (IANA) は実現値操作値の名前空間を管理します。 値とその意味は、 RFC または他のよく評価された、持続的で、 既に入手可能な参照物で、独立な実装が相互運用可能である程度十分詳細に文書化されていなければなりません。 この制約の元、名前割り当ては先来先給とします (RFC 2434 を参照)。

This specification also inserts a new value in the IANA HTTP Status Code Registry (see RFC 2817 [18]). See section 10.4.1 for the specification of this code.

この仕様書は IANA HTTP 状態符号登録簿 (RFC 2817 参照) にも新しい値を挿入します。この符号の仕様は10.4.1節を参照。

その後の利用

[32] Re: RFC3229 w/ feeds [was: Paging, Feed History, etc.] ( ( 版)) <http://www.imc.org/atom-syntax/mail-archive/msg18576.html>

[33] Does an implementation of RFC 3229 (Delta encoding for HTTP) exist? - Stack Overflow ( ( 版)) <http://stackoverflow.com/questions/3264457/does-an-implementation-of-rfc-3229-delta-encoding-for-http-exist>

[40] DUL実現値操作として使われることも想定していました >>41

[44] いずれも結局ほとんど使われませんでした。