/
118.txt
160 lines (113 loc) · 9.63 KB
/
118.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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
[6] [DFN[[CODE(HTTP)@en[[[DELETE]]]]]] [[メソッド]]は、
[[対象資源]]を削除することを[[要求]]するものです。
* 仕様書
[REFS[
- [215] '''[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.3.5>'''
- [212] [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.2>
- [1] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-7>
- [3] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-9.6>
]REFS]
* 意味
[216] [CODE(HTTP)@en[[[DELETE]]]] [[メソッド]]は、
[[対象資源]]とその現在の機能との関連付けを削除することを[[起源鯖]]に要求するものです [SRC[>>215]]。
[13] [[WebDAV]] [[コレクション]]においては、[[要求URL]]で指定された[[コレクション]]とすべての[[内部メンバー]]を削除するとの指示になります [SRC[>>3]]。
* 構文
[11] [[WebDAV]] [[クライアント]]は、[[コレクション]]に対する [CODE(HTTP)@en[[[DELETE]]]]
[[要求]]に [CODE(HTTP)[[[Depth:]] [[infinity]]]] 以外の
[CODE(HTTP)@en[[[Depth:]]]] [[ヘッダー]]を指定しては[['''なりません''']] [SRC[>>3]]。
[219] [CODE(HTTP)@en[[[DELETE]]]] [[要求]]の [[payload]] の意味は定義されていません [SRC[>>215]]。
[220] [[payload]] が含まれると、実装によっては[[要求]]を拒絶するかもしれません [SRC[>>215]]。
* 性質
[213] [CODE(HTTP)@en[[[DELETE]]]] は、[[冪等なメソッド]]です [SRC[>>212]]。
[221] [CODE(HTTP)@en[[[DELETE]]]] [[メソッド]]への[[応答]]は、
[[キャッシュ可能]]ではありません [SRC[>>215]]。
[222] 同じ[[実効要求URL]]の[[キャッシュ]]がある状態で
[CODE(HTTP)@en[[[DELETE]]]] [[要求]]が成功した場合には、
[[キャッシュ]]は[[非妥当]]となります [SRC[>>215]]。
[2] [[書き込みロック]]の適用対象となります [SRC[>>1]]。
* 処理
[217] [[対象資源]]が複数の[[表現]]を持つ時、それらも破棄されるかもしれませんし、
されないかもしれません。関連する他のもの、例えばデータベース接続なども破棄されるかもしれません。
[SRC[>>215]] いずれにせよ詳細は実装依存であり、 [[HTTP]] の仕様の範囲外です。
[15] [[WebDAV]] [[コレクション]]においては、[[要求]]の[[ヘッダー]]は削除する各[[資源]]に対して適用しなければ[['''なりません''']] [SRC[>>3]]。
[12] [[WebDAV]] [[コレクション]]においては、 [CODE(HTTP)@en[[[Depth:]] [[infinity]]]]
が指定されたかのように動作しなければ[['''なりません''']] [SRC[>>3]]。
[14] [[WebDAV]] [[コレクション]]の削除において[[メンバーURL]]で識別される[[資源]]を削除できない時は、
その[[祖先]]を削除しては[['''なりません''']] [SRC[>>3]]。 [[WebDAV]]
[[コレクション]]に対する [CODE(HTTP)@en[[[DELETE]]]] の完了時には、
名前空間が整合した状態になっていなければ[['''なりません''']] [SRC[>>3]]。
[4] [[WebDAV]] [[鯖]]は、削除された[[資源]]が[[ロック根]]である[[ロック]]を破棄しなければ[['''なりません''']] [SRC[>>3]]。
[5] [[WebDAV]] [[鯖]]は、[[要求URL]]から[[資源]]への[[写像]]を削除しなければ[['''なりません''']] [SRC[>>3]]。
[9] [[WebDAV]] に従う[[資源]]に対する [CODE(HTTP)@en[[[DELETE]]]] の後他の操作が行われていない状態では、
その[[要求URL]]に対する [CODE(HTTP)@en[[[GET]]]] や [CODE(HTTP)@en[[[HEAD]]]]
や [CODE(HTTP)@en[[[PROPFIND]]]] は [CODE(HTTP)[[[404]]]] を返さなければ[['''なりません''']] [SRC[>>3]]。
;; [10] [CODE(HTTP)[[[410]]]] は認められていないようです。
[218] [[起源鯖]]は、処理が成功した場合には、
処理が成功するであろうものの実施されていない場合には [CODE(HTTP)[[[202]]]] を、
実施され追加情報は特に無い場合には [CODE(HTTP)[[[204]]]] を、
実施され[[応答メッセージ]]に状態を説明する[[表現]]を含める場合には [CODE(HTTP)[[[200]]]]
を返す[['''べきです''']] [SRC[>>215]]。
[16] [[WebDAV]] [[コレクション]]の削除で[[コレクション]]以外の[[メンバー]]の削除中にエラーが発生した場合には、
[CODE(HTTP)[[[207]]]] [[応答]]を使うことができます。 [SRC[>>3]]
[EG[
[17] 例えば[[コレクション]]内の一部の[[資源]]が[[ロック]]されていて削除できなかった時には、
[CODE(HTTP)[[[207]]]] 中に当該[[資源]]を [CODE(HTTP)[[[423]]]] と記述することで、
これを[[クライアント]]に説明できます [SRC[>>3]]。
]EG]
[19] なお [CODE(HTTP)[[[207]]]] 内で [CODE(HTTP)[[[424]]]] や [CODE(HTTP)[[[204]]]]
は使う[['''べきではありません''']] [SRC[>>3]]。
[18] [[WebDAV]] [[コレクション]]の削除で要求の処理が完全に失敗した時には、
[CODE(HTTP)[[[207]]]] でなく [CODE(HTTP)[[[4xx]]]] を使っても構いません [SRC[>>3]]。
* 歴史
** HTTP [CODE@en[DELETE]] メソッド
[REFS[
= [205] [[RFC 1945]] ([[HTTP/1.0]]) ([[IETF]] [[情報提供]]) <urn:ietf:rfc:1945>
-- [CSECTION[D.1.2 DELETE]]
= [206] [DEL[[[RFC 2068]] ([[HTTP/1.1]]) ([[IETF]] [[提案標準]]) <urn:ietf:rfc:2068>]]
-- [CSECTION[9.7 DELETE]]
= [7] [[RFC 2616]] ([[HTTP/1.1]]) <http://tools.ietf.org/html/rfc2616>
-- [207] [CSECTION[9.7 DELETE]]
]REFS]
[FIG(quote)[
[FIGCAPTION[
RFC 1945 (HTTP/1.0) D.1.2; RFC 2068・2616 (HTTP/1.1) 9.7 DELETE
]FIGCAPTION]
> The DELETE method requests that the origin server delete the resource
identified by the Request-URI. [INS[This method MAY be overridden by human intervention (or other means) on the origin server. The client cannot be guaranteed that the operation has been carried out, even if the status code returned from the origin server indicates that the action has been completed successfully. However, the server SHOULD [DEL[not]] [INS[NOT]] indicate success unless, at the time the response is given, it intends to delete the resource or move it to an inaccessible location.]]
[CODE(HTTP)[DELETE]] 方式は、起源サーバーに [CODE(ABNF)[Request-URI]]
で識別される[[資源]]を削除することを要求します。 [INS[この方式は、起源サーバーにおける人間の干渉 (や他の手段) で上書きされても'''構いません'''。クライアントは、たとえ起源サーバーが返した[[状態符号]]が動作は成功裏に完了したと示したとしても、操作が実行されたと保証されません。しかし、サーバーは、応答の時点で資源を削除するか、または接続不能な位置に移動するかするつもりでない限り、成功を示す'''べきではありません'''。]]
[INS[
> A successful response SHOULD be 200 (OK) if the response includes an
entity describing the status, 202 (Accepted) if the action has not
yet been enacted, or 204 (No Content) [INS[action has been enacted]] [DEL[if the response is OK]] but [INS[the response]]
does not include an entity.
成功応答は、その応答が状態を説明する[[実体]]を含んでいるなら [CODE(HTTP)[[[200]]]]
(了解) と、動作がまだ行われていないなら [CODE(HTTP)[[[202]]]] (受入れ)
と、動作は行われたが応答が実体を含んでいないなら [CODE(HTTP)[[[204]]]]
(無内容) とする'''べきです'''。
> If the request passes through a cache and the Request-URI identifies
one or more currently cached entities, those entries [DEL[should]] [INS[SHOULD]] be
treated as stale. Responses to this method are not cach[INS[e]]able.
要求が[[キャッシュ]]を通じて渡され、 [CODE(ABNF)[Request-URI]]
が現在キャッシュされている実体の1つか複数個かを識別するなら、
それらの実体は[[腐敗]]しているものとして扱う'''べきです'''。
この方式への応答は[[キャッシュ可能]]ではありません。
]INS]
]FIG]
** HTML [CODE(HTMLa)@en[action]] [CODE(HTML)@en[delete]]
[208] [[Web Forms 2.0]] や [[HTML5]] には [CODE(HTMLa)@en[[[action]]]] [[属性]]や
[CODE(HTMLa)@en[[[formaction]]]] [[属性]]の値 [DFN[[CODE(HTML)@en[[[delete]]]]]]
が定義されており、[[フォーム]]の[[提出]]の際に [[HTTP]] の [CODE(HTTP)@en[[[DELETE]]]]
[[メソッド]]を使うことを表していました。
[209] [[WF2]] を実装していた [[Opera]] も対応していました。
[210] しかし他の [[Webブラウザー]]には実装されず、また[[著者]]も削除には [CODE(HTTP)@en[[[POST]]]]
を使い続けたため、結局 [[HTML]] から [CODE(HTML)@en[[[delete]]]] は削除されました。
* 関連
[8] [CODE(HTTP)[DELETE]] メソッドは [[REST]]
[[体系様式]]における[[資源]]に対する基本操作
([[Webメソッド]]) の1つです。
[211] [[HTTP]] から派生した [[RTSP]] や [[SIP]] には [CODE(HTTP)@en[[[DELETE]]]]
[[メソッド]]は存在しません。
[214] [CITE@en[RFC 7252 - The Constrained Application Protocol (CoAP)]]
( ([TIME[2014-06-27 00:59:37 +09:00]] 版))
<http://tools.ietf.org/html/rfc7252#section-5.8.4>