If

If: ヘッダー (HTTP)

[41] If: ヘッダーは、状態トークン実体タグによって要求の適用条件を指定するものです。

仕様書

意味

[10] If: ヘッダーは、 トークンと実体タグが特定の資源と一致するかどうかの条件の状態リストを指定して要求条件付きとするために使うことができます >>8

[11] If: ヘッダーは、 状態トークンを指定して、クライアント状態トークンについての知識を有することを示すためにも使うことができます >>8状態トークンIf: に指定することを提出 (submit) といいます >>1, >>8

[2] その意味は状態トークンの種類によって異なります >>8 が、 ロックトークンの場合、クライアントprincipalロックを有すると表明することとなります。

[12] >>10>>11 は同じヘッダーに記述されますが、別々に処理されます。 状態トークン提出されたとみなすかどうかと、 状態トークンが含まれる状態リストをが実際に評価したか否かや、 含まれる条件がに評価されるか否かは、独立しています >>8

構文

[15] If: ヘッダーの値は、 1つ以上のタグ無しリストの OWS 区切りのリスト、 または1つ以上のタグ付きリストの OWS 区切りのリストです >>8

  1. |
    1. =
      1. タグ無しリスト
      2. *
        1. OWS
        2. タグ無しリスト
    2. =
      1. タグ付きリスト
      2. *
        1. OWS
        2. タグ付きリスト
タグ付きリストとタグ無しリストを混在させることはできません。

[24] If: ヘッダーは、含まれるタグ付きリストやタグ無しリストのいずれかがと評価されるなら全体としてであり、 すべてがと評価されるなら全体としてとなります >>8

[16] タグ無しリストは、1つ以上の条件を () で括ったものです >>8。条件の前後には OWS を挿入できるようです。

  1. (
  2. OWS
  3. 条件
  4. *
    1. OWS
    2. 条件
  5. OWS
  6. )

[17] タグ付きリストは、1つ以上のタグ無しリストの前に資源タグを置いたものです >>8。 資源タグの後やリスト間には OWS を挿入できるようです。 資源タグは、単純参照<> で括ったものです >>8

  1. <
  2. 単純参照
  3. >
  4. OWS
  5. リスト
  6. *
    1. OWS
    2. リスト

[20] タグ付きリストは、リストが資源タグの URL についてのものであることを表しています。 タグ無しリストは、リストが要求URLについてのものであることを表しています。 >>8

[22] タグ付きリスト内の各リストやタグ無しリストは、 含まれる条件がすべてであるなら全体としてで、 のものがあるなら全体としてとなります >>8

[23] タグ付きリストは、含まれるリストのいずれかがであるなら全体としてで、 すべてであるなら全体としてとなります >>8

[18] 条件は、状態トークン実体タグか、それらの前に Not を置いたものです。 状態トークン絶対URL<> で括ったものです。 実体タグ[] で括ります。 Not大文字・小文字不区別です。 >>8 Not の前後には OWS を挿入できるようです。

  1. ?
    1. Not
    2. OWS
  2. |
    1. =
      1. <
      2. ASCII絶対URL
      3. >
    2. =
      1. [
      2. 実体タグ
      3. ]
[19] 絶対URLの定義としては RFC 3986 absolute-URI が参照されています >>8

[21] Not は条件の否定を表しています >>8

文脈

[34] 任意の要求If: ヘッダーを含めることができます >>33

[6] 変更される資源が複数ある場合は、関係するすべてのロックロックトークン提出しなければなりません >>5

[7] 例えば移動時に移動元と移動先の両方がロックされているなら、 両方のロックトークンが必要です >>5

[4] 変更しようとする資源コレクションメンバーとして間接的にロックされている時は、 (直接のロックとは別に) コレクションロックトークンも指定する必要があります >>3

[39] ロックを更新するために LOCK 要求If: ヘッダーを指定することができます。その場合、 ロックトークンは1つだけ指定しなければなりません>>38, >>37

[29] WebDAV に対応しないIf: を扱えないでしょうから、 HTTP/1.1 への要求には Cache-Control: no-cache を、 HTTP/1.0 への要求には Pragma: no-cache を含めなければなりません >>8。 一般に WebDAV に対応していないを判定する信頼できる方法はありませんから、 常に指定するのが良い (advised) >>8 とされています。

処理

[14] If: ヘッダーと評価された場合には、 412 応答を返して失敗としなければなりません >>8, >>33。 そうでない場合には、 If: ヘッダーが無かった場合のように処理を続行できます >>8

[25] 実体タグは、指定された資源実体タグと (強い比較または弱い比較で) 一致するかどうかを評価します >>8

[26] 状態トークンは、指定された資源に関する状態トークンと完全一致で比較します。 ロックトークンの場合には、資源ロックの適用範囲内にあれば一致とします。 >>8

[27] なお指定された資源写像されていない URL の場合には、 実体タグ状態トークンも一致しないものとします >>8

[28] ロックの適用範囲内となる場合でも特別扱いはしていないようです。

[13] 関係するすべてのロックロックトークンが指定されなかった場合は、 変更操作が失敗しなければなりません>>5

[40] LOCK 要求If: が指定された場合で対象資源がその範囲内にない場合には、 412 応答を返すことができます。 応答には事前条件符号 lock-token-matches-request-uri を指定できます。 >>37

歴史

[36] IANA登録簿RFC 4918 が出典に更新されています >>35

[30]

If: (<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2>
  ["I am an ETag"])
  (["I am another ETag"])
... は、
... のいずれかであることを求めています >>8

[31]

If: (Not <urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2>
  <urn:uuid:58f202ac-22cf-11d1-b12d-002035b29092>)
... は、1つ目の URLロックの対象ではなく、かつ 2つ目の URLロックの対象であることを求めています >>8

[32]

If: (<urn:uuid:181d4fae-7d8c-11d0-a765-00a0c91e6bf2>)
  (Not <DAV:no-lock>)
... は、 DAV:no-lockロックトークンとして使われることのない URL であり、その否定形は常にとなるため、ヘッダー全体として常にに評価されます。 ロックがタイムアウトで無効となっても失敗せずに処理を続けさせたい場合にこのような指定が有用です。 >>8

関連

[9] If-Match: ヘッダーと似ていますが、 If: ヘッダーには実体タグの他に状態トークンも指定できる点が違っています。

[42] サポート切れの「IIS 6」でリモートから任意のコードが実行できるという脆弱性が発見される | スラド セキュリティ () <https://security.srad.jp/story/17/04/05/0637251/>