[8] 事前条件の指定がある要求のことを、条件付き要求といいます。 鯖は事前条件が満たされる場合には要求メソッドで指定された処理を対象資源に対して実行しますが、 事前条件が満たされなければ処理は実行せずにエラーを返します。
[9] 条件付き要求は、キャッシュより新しい場合のみ資源を取得したい時や、 他者の編集との衝突に注意しつつ鯖にある資源を更新したい時などに使われます。
[4] 条件付き要求は、 対象資源に要求メソッドの意味を適用する前に確認されるべき事前条件を示すヘッダーをいくつか含む要求です >>3 1.。
[2] 次の要求ヘッダーは条件付きに分類されています >>1。
[99] RFC 4918 は >>2 に加えて次のヘッダーも条件付きに分類しています >>100。 RFC 723x はなぜかこれらに言及していませんが、分類名やヘッダーの性格から、 RFC 723x における「条件付き」と RFC 4918 の「条件付き」 は同じ分類と考えても良さそうです。
$ curl -fL https://raw.githubusercontent.com/manakai/data-web-defs/master/data/headers.json | ./jq '.headers | map(select(.http.conditional)) | map (.name)'
[37] クライアントが生成する各ヘッダーの構文的要件については、 各ヘッダーの項を参照。
[38] 鯖の処理モデルの項の通り、鯖は条件付き要求に対応する必要はないので、 クライアントは条件が無視されて通常の応答が返された場合にも対処できる必要があります。
[69] 検証のためにキャッシュが条件付き要求を行う場合は、 次のように処理します。
[45] 受信者であるキャッシュや起源鯖は、 要求を次のように処理しなければなりません >>18, >>29。
Range:
の処理は、なぜか MUST
ではなく SHOULD となっています >>28。 206
を実装しないことが認められているので MUST なのかもしれませんが、
詳細不明です。[27] 事前条件は選択された表現の選択や編集に関わる要求メソッド以外では無視する
>>18 とされています。無視するべきメソッドとして CONNECT
、
OPTIONS
、TRACE
が挙げられています >>18 が、
完全なリストはなぜか提供されていません。
[40] ヘッダーの優先順位の根拠は次のように説明されています >>29。
[41] If-Match:
や If-None-Match:
や If-Modified-Since:
や If-Unmodified-Since:
を実装していない場合どう動作するべきか仕様上明確ではありませんが、
実際の鯖はこれらを無視するようです。 (412
や 304
ではありません。)
[16] 受信者は、 If-Modified-Since:
や
If-Unmodified-Since:
が妥当な
HTTP-date
でないとき、これを無視しなければなりません
>>14, >>25。
[30] If-Range:
ヘッダーは、
Range:
ヘッダーが含まれていなければ無視しなければなりません
>>29。
[19] >>50、>>56 で 2xx
を返せるのは、状態の変更が要求されており、
最終的な状態が既に対象資源の現在の状態に反映されていると起源鯖が確認できる場合です。
すなわち、以前の応答が失われたか互換性のある変更が他の利用者エージェントにより行われたかによって利用者エージェントの要求が既に成功していたことに気づいていないような場合です。
ただしそのような場合には、同じ利用者エージェントが直前の要求を繰り返していると確認できる場合を除き、
検証子ヘッダーを送ってはなりません >>12, >>25。
[103] サーバーは、条件付要求のみを受け付けることにできます。
条件付要求でない要求を受け取ったら、 428
応答を返すことができます。
[413] Add cache mode concept and elaborate a bit on caching. · 99377cd · whatwg/fetch ( ( 版)) <https://github.com/whatwg/fetch/commit/99377cd334e7e4e7737c2b2fd521c74a6cf7e01a>
[101] Close #141: fix 304 handling · whatwg/fetch@1a2f6b4 ( 版) <https://github.com/whatwg/fetch/commit/1a2f6b49d616cfd74536c1a8dbed8b5c1215d548>
[102] Merge conditionals in 304 handling · whatwg/fetch@bb9313f ( 版) <https://github.com/whatwg/fetch/commit/bb9313fc04b91c10639a3d5f5454cb2a6f224b45>
[104] Understanding Conditional Requests and Refresh | IEInternals ( ()) <https://blogs.msdn.microsoft.com/ieinternals/2010/07/08/understanding-conditional-requests-and-refresh/>