/
425.txt
114 lines (85 loc) · 6.25 KB
/
425.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
[1] [[HTTP]] において[[メソッド]]や[[要求]]が[DFN[[RUBYB[[[安全]]]@en[safe]]]]であるとは、
[[副作用]]が無い (少なくても[[利用者]]は求めていない) ことを表します。
* 仕様書
[REFS[
- [6] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-06-07 01:55:45 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-4.2.1>
]REFS]
* 定義
[8] [[要求メソッド]]は、その[[意味]]が[[読み取り専用]]と定義されていれば、
「[DFN[[RUBYB[[[安全]]]@en[safe]]]]」です。[[安全なメソッド]]では、
[[クライアント]]は[[起源鯖]]が[[対象資源]]の状態を変化させることを要求も期待もしませんし、
普通に[[安全なメソッド]]を使っても、[[起源鯖]]で有害な事象やおかしなことは起こらないと期待されます。
[SRC[>>6]]
[9] [[実装]]が >>8 の条件を満たしている保証はなく、何かを変化させたり、
[[副作用]]を起こしたりすることはあり得ます。しかし、それは[[クライアント]]が要求したことではなく、
[[クライアント]]が責任を持つものではない、ということが重要とされています。 [SRC[>>6]]
[EG[
[10] 例えばほとんどの[[鯖]]は[[アクセスログ]]にすべての[[要求]]を記録しています。
それによって[[鯖]]の[[ストレージ]]が満杯になってクラッシュする可能性があっても、
[[安全]]かどうかには影響しません。また、[[広告]]の取得であれば、
[[広告]]主への[[課金]]という[[副作用]]を持つかもしれませんが、やはり[[安全]]性とは関係ありません。
[SRC[>>6]]
]EG]
;; [11] ここでの「安全」は、[[セキュリティー]]とは関係ありません。
* 処理モデル
[13] [[安全]]と[[非安全]]の区別は、無害な形で自動的な取得 ([[ボット]])
やキャッシュ処理 ([[先読み]]) を実行できるようにするためのものです。 [SRC[>>6]]
[14] [[利用者エージェント]]は、信頼できないかもしれない[[内容]]の処理時に[[安全]]でない[[メソッド]]の自動利用を制限することもできます。
[SRC[>>6]]
[15] [[利用者エージェント]]は、可能な操作を提示する時に[[安全]]か[[非安全]]かを明確に区別して、
[[非安全]]な操作を実行する前に[[利用者]]が気付けるようにする[['''べきです''']] [SRC[>>6]]。
[16] [[実効要求URL]]の一部が動作を表す場合、例えば [CODE[page?do=delete]]
のような [[URL]] の場合、[[資源]]の所有者は、[[安全なメソッド]]の時はその動作を無効にするか、
認めないようにしなければ[['''なりません''']] [SRC[>>6]]。
* 安全なメソッドの一覧
[7] 次の[[要求メソッド]]は、[[安全]]です。
[FIG(list)[
- [CODE(HTTP)@en[[[GET]]]]
- [CODE(HTTP)@en[[[HEAD]]]]
- [CODE(HTTP)@en[[[OPTIONS]]]]
- [CODE(HTTP)@en[[[TRACE]]]]
]FIG]
;; [12] [[RFC 2616]] までは [CODE(HTTP)@en[[[GET]]]] と [CODE(HTTP)@en[[[HEAD]]]]
のみ[[安全]]とされていましたが、 [[RFC 7231]] で他の2つも追加されました。
* 歴史
[FIG(quote)[
[FIGCAPTION[
[2] RFC 2068・2616 (HTTP/1.1) 9.1 Safe and Idempotent Methods
]FIGCAPTION]
* RFC 1945 (HTTP/1.0) 12.2; RFC 2068・2616 (HTTP/1.1) 9.1.1 Safe Methods
> [DEL[[DEL[The writers of client software]] [INS[Implementers]]]] [INS[[INS[{2616}]] Implementors]] should be aware that the software represents the user in
their interactions over the Internet, and should be careful to allow
the user to be aware of any actions they [DEL[may]] [INS[might]] take which may have an
unexpected significance to themselves or others.
実装者は、ソフトウェアがインターネット上の相互作用で利用者を表現することを意識し、
自身や他者に意図せぬ意味を持つかもしれない動作を取ろうとする時には利用者がそのことに気づけるように注意するべきです。
> In particular, the convention has been established that the GET and
HEAD methods [DEL[should never]] [INS[SHOULD NOT]] have the significance of taking an action
other than retrieval. These methods [DEL[should]] [INS[ought to]] be considered [DEL["safe."]] [INS["safe".]]
This allows user agents to represent other methods, such as POST, [INS[[INS[{2068,2616}]] PUT and DELETE,]] in a special way, so that the user is made aware of the
fact that a possibly unsafe action is being requested.
特に、 [CODE(HTTP)[[[GET]]]] 方式や [CODE(HTTP)[[[HEAD]]]]
方式が取り出し (retrieval) 以外の動作を取る意味を持つ'''べきではない'''という慣習が確立しています。
これらの方式は「安全」であると考えられるべきです。
これによって、利用者は他の方式、例えば [CODE(HTTP)[[[POST]]]]
や [CODE(HTTP)[[[PUT]]]] や [CODE(HTTP)[[[DELETE]]]]
を、特別な用途で表明することができ、
よって利用者に非安全かもしれない動作が要求されようとしていることを気づかせることができます。
> Naturally, it is not possible to ensure that the server does not
generate side-effects as a result of performing a GET request; in
fact, some dynamic resources consider that a feature. The important
distinction here is that the user did not request the side-effects,
so therefore cannot be held accountable for them.
当然、サーバーが [CODE(HTTP)[GET]] 要求を行うことで副作用を起こさないことを保証はできません。
実際、動的資源の中にはそれを機能としています。
ここでの重要な違いは、利用者は副作用を要求していないので、
従ってそれについての責任を負えないことです。
[INS[
注: 注記のない変更点は、 RFC 2068→RFC 2616 での修正。
]INS]
* RFC 2068・2616 (HTTP/1.1) 9.1.2 Idempotent Methods
→[CODE(WikiPage)[[[冪等]]]]
]FIG]
* 関連
[5] 類似した概念に[[冪等]]があります。[[安全なメソッド]]は、[[冪等]]です [SRC[>>6]]。
;; [17] 将来にわたってこの声質が保証されるのかは不明です。