[1] HTTP においてメソッドや要求が安全であるとは、 副作用が無い (少なくても利用者は求めていない) ことを表します。
[8] 要求メソッドは、その意味が読み取り専用と定義されていれば、 「安全」です。安全なメソッドでは、 クライアントは起源鯖が対象資源の状態を変化させることを要求も期待もしませんし、 普通に安全なメソッドを使っても、起源鯖で有害な事象やおかしなことは起こらないと期待されます。 >>6
[9] 実装が >>8 の条件を満たしている保証はなく、何かを変化させたり、 副作用を起こしたりすることはあり得ます。しかし、それはクライアントが要求したことではなく、 クライアントが責任を持つものではない、ということが重要とされています。 >>6
[10] 例えばほとんどの鯖はアクセスログにすべての要求を記録しています。 それによって鯖のストレージが満杯になってクラッシュする可能性があっても、 安全かどうかには影響しません。また、広告の取得であれば、 広告主への課金という副作用を持つかもしれませんが、やはり安全性とは関係ありません。 >>6
[13] 安全と非安全の区別は、無害な形で自動的な取得 (ボット) やキャッシュ処理 (先読み) を実行できるようにするためのものです。 >>6
[14] 利用者エージェントは、信頼できないかもしれない内容の処理時に安全でないメソッドの自動利用を制限することもできます。 >>6
[15] 利用者エージェントは、可能な操作を提示する時に安全か非安全かを明確に区別して、 非安全な操作を実行する前に利用者が気付けるようにするべきです >>6。
[16] 実効要求URLの一部が動作を表す場合、例えば page?do=delete
のような URL の場合、資源の所有者は、安全なメソッドの時はその動作を無効にするか、
認めないようにしなければなりません >>6。
Safe:
ヘッダー[25] Safe:
ヘッダーは、
要求を繰り返しても安全であるか否かを示します >>24。
[38] Safe:
ヘッダーの値は、字句です。
大文字・小文字不区別です。
[46] 現在次の値が定義されています。
[48] RFC 2310 では値として yes
と no
を規定しています。yes
は安全、 no
は非安全を表します。
[47] HTCPCP は if-
を条件付きで安全であることを表すよう拡張しています。
具体的な値として、 if-user-awake
を規定してます。 >>45
[50] 任意の応答で利用できると思われますが、不明です。 要求では利用できないと思われます。
[51] 実際に利用されている例があるかは不明です。
[39] 応答に Safe:
ヘッダーがなければ、
GET
や HEAD
の場合を除き、
非安全とみなさなければなりません >>24。
[40] 利用者エージェントは GET
や HEAD
の時 Safe:
ヘッダーを無視するべきです >>24。
[26] 利用者エージェントは要求の反復が安全なら、 利用者に確認せずに自動的に反復して構いません >>24。
[27] 例えば次のような場合に利用者エージェントは POST
要求を繰り返す必要があります >>24。
[31] POST
が不安全なら再試行する前に利用者に明示的に確認する必要がありますが、
多くの利用者を混乱させますし、 navigation を遅延させてしまいます。
安全ならこの確認を省略できます。 >>24
[52] 実装例があるかは不明です。
[5] 類似した概念に冪等があります。安全なメソッドは、冪等です >>6。