/
56.txt
494 lines (381 loc) · 22.4 KB
/
56.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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
[506] [[HTTP]] および派生プロトコルにおける[DFN[[RUBYB[[[要求メソッド]]]@en[request method]]]]は、当該[[要求]]によって[[鯖]]に対して求めている操作の種類を表します。
[[メソッド]]は短い英数字列 (通常は[[大文字]]) によって表されます。
* 仕様書
[REFS[
- [524] '''[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>'''
- [521] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#section-3.1.1>
- [8] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-08-07 05:54:02 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-8.1>
- [513] [CITE@en-US[XMLHttpRequest]] ([TIME[2012-02-18 19:54:32 +09:00]] 版) <http://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-open>
]REFS]
* 意味
[525] [[要求メソッド]]は、[[要求]]の意味を表すものであり、
[[クライアント]]が[[要求]]を行った目的と、
成功した場合に[[クライアント]]が期待する挙動を示したものです。 [SRC[>>524]]
[13] 標準化される[[メソッド]]は一般的なもので、特定の [[MIME型]]や[[資源]]の種類、
[[応用]]に限定されるものではなく、どんな[[資源]]にも適用可能であろうものとされています。
[SRC[>>8]]
;; [14] [[WebDAV]] という特定の[[応用]]でしか使えなそうな[[要求メソッド]]が沢山登録されていますが、
一応汎用的に使える定義になっているという建前なのでしょう...
[15] [CODE(HTTP)@en[[[HEAD]]]] の場合を除き、 [[HTTPメッセージ]]の構文解析は[[要求メソッド]]とは独立したもの
[SRC[>>8]] で、
新たな[[メソッド]]で[[メッセージ本体]]を無しとするなどの変更は行えないとされています。
* 構文
[522] [[メソッド]]の名前は、 [[字句]]です [SRC[>>521, >>524]]。
[FIG(railroad)[
= [[字句]]
]FIG]
** 大文字と小文字
[3] [[HTTP]] [SRC[>>521, >>524]] でも [[RTSP]] でも [[SIP]] でも、
大文字・小文字を区別します。
とはいえ実装は区別しないものも多いみたいです。
[514] [[XHR]] は9種類のメソッドについて[[ASCII大文字・小文字不区別]]、それ以外について区別するとしています
[SRC[>>513]]。
[REFS[
- [5] [CITE[HTTP methods, Web browsers and XMLHttpRequest - Anne’s Weblog]] ([TIME[2007-10-10 00:14:30 +09:00]] 版) <http://annevankesteren.nl/2007/10/http-method-support>
]REFS]
[510] >>5 は各[[Webブラウザー]]の [[XHR]] における[[メソッド]]の[[大文字]]と[[小文字]]についての調査結果です。
;; [526] 区別しない理由を、 大文字と小文字を区別する[[メソッド]]名を用いる[[オブジェクト]]ベースのシステムへの[[関門]]として用いられることがあるから
[SRC[>>524]]、と [[HTTP]] の仕様書は説明していますが、 [[HTTP]]
の[[メソッド]]はそのようなシステムで普通[[オブジェクト]]に適用できる[[メソッド]]ほど種類も豊富ではありませんし、
[[HTTP]] の[[メソッド]]は[[オブジェクト]]ごとに自由に追加するものではないことを特徴にしているわけですから、
本当にそんな根拠で大文字と小文字を区別しないことにする理由があるのか怪しいところです。
;; [26] [[HTTP]] 派生プロトコルの1つである [[S-HTTP]] は明記していませんが、
規定されている [CODE(HTTP)@en[[[Secure]]]] [[メソッド]]を使った例に
[CODE(HTTP)@en[[[SECURE]]]] としているところがあり、
[[大文字・小文字不区別]]としているようです。
** 長さ
[523] [[メソッド]]名に長さの上限は設けられていません。
[403] 実装しているどの[[メソッド]]よりも長い[[メソッド]]を受信した[[鯖]]は、
[CODE(HTTP)[[[501]]]] を返す[['''べきです''']] [SRC[>>521]]。
[503] [[メソッド]]を含む[[要求行]]全体では、
最低でも8000[[オクテット]]の[[要求行]]には対応する[['''べき''']] [SRC[>>521]]
とされています。 (ほとんどは[[要求対象]]となる[[URL]]の長さでしょう。)
** [CODE(HTTP)@en[M-]]
[27] [[RFC 2774]] は必須の要求であることを表すために[[要求メソッド]]の接頭辞
[CODE(HTTP)[[[M-]]]] を使っています。
;; [CODE(HTTP)[[[M-*]]]] 参照。
[16] [[RFC 7231]] は、 [CODE(HTTP)[[[M-]]]] から始まる[[要求メソッド]]は
[[RFC 2774]] で使われているので新規登録を避けるよう [SRC[>>8]] 述べています。
;; [17] 現在 [CODE(HTTP)[M-]] から始まる[[メソッド名]]は [[IANA]]
に登録されていないようです。 [TIME[2014-09-04T05:23:08.000Z]]
* メソッドの特性
[11] [[要求メソッド]]によって[[要求]]や[[応答]]の性質や処理方法が異なることがあります。
[FIG(short list)[
- [503] [[安全]]
- [504] [[冪等]]
- [505] [[キャッシュ可能性]]
- [515] 大文字・小文字の区別
- [516] [[XHR]] での安全性
]FIG]
* 文脈
[23] [[要求メソッド]]は次の場面で用いられます。
[FIG(short list)[
- [[要求行]]
- [CODE(HTTP)@en[[[Allow:]]]]
- [CODE(HTTP)@en[[[Public:]]]]
]FIG]
* 処理モデル
[531] [[鯖]]は、[[要求]]で指定された[[メソッド]]に従って処理を試み、
その結果を[[メソッド]]の定義に従って[[応答]]として[[クライアント]]に送信します。
[527] 一般目的の[[鯖]]は、 [CODE(HTTP)@en[[[GET]]]] と [CODE(HTTP)@en[[[HEAD]]]]
は少なくても実装しなければ[['''なりません''']] [SRC[>>524]]。
;; [528] どのような[[鯖]]が一般目的ではないのかは不明です。
現実には一般目的っぽい[[鯖]]であっても、 [CODE(HTTP)@en[[[HEAD]]]]
が実装されていないことがあります。
;; [534] 実装しなければならないからといって、すべての[[対象資源]]で [CODE(HTTP)[[[2xx]]]]
を返さなければならないわけではありません。例えばある [[URL]]
を [CODE(HTTP)@en[[[GET]]]] した時はもちろん [CODE(HTTP)[[[404]]]]
を返したり、 [CODE(HTTP)[[[405]]]] を返したりしても構いません。
;; [2] 更に、ある[[対象資源]]がどの[[要求メソッド]]も実装しないことがあり得て良いようです。
[CODE(HTTP)@en[[[Allow:]]]] が空になることが認められています。
[532] [[起源鯖]]は、[[要求メソッド]]を認識できないか、実装していない時は、
[CODE(HTTP)[[[501]]]] [[応答]]を返す[['''べきです''']] [SRC[>>524]]。
[533] [[起源鯖]]は、[[要求メソッド]]を知っているものの、[[対象資源]]に対して認めていない時は、
[CODE(HTTP)[[[405]]]] [[応答]]を返す[['''べきです''']] [SRC[>>524]]。
* メソッド一覧の提示
[530] [[起源鯖]]は、[[対象資源]]が対応している[[要求メソッド]]の一覧を
[CODE(HTTP)@en[[[Allow:]]]] [[ヘッダー]]で示すことができます。
この[[ヘッダー]]は [CODE(HTTP)[[[405]]]] [[応答]]では必須ですが、
それ以外の[[応答]]でも使うことができます。
[12] [[起源鯖]]は、 [[CORS]] において[[対象資源]]についての[[要求]]に用いることができる[[メソッド]]の一覧を
[CODE(HTTP)@en[[[Access-Control-Allow-Methods:]]]] [[ヘッダー]]で示すことができます。
* メソッドの一覧
[FIG[
[FIGCAPTION[
[1] [[HTTP]] および派生プロトコルの[[メソッド]]の一覧
]FIGCAPTION]
,[CODE(ABNF)[request-method]] ,プロトコル
,[[ACK]] ,"SIP ([RFC 2543], [IANAREG])"
,[CODE(HTTP)@en[[[ACL]]]],[[HTTP]]
,[[ANNOUNCE]] ,RTSP ([RFC 2326])
,[CODE(HTTP)@en[[[BASELINE-CONTROL]]]],[[HTTP]]
,[CODE(HTTP)@en[[[BCOPY]]]],[[HTTP]]
,[CODE(HTTP)@en[[[BDELETE]]]],[[HTTP]]
,[CODE(HTTP)@en[[[BEGIN]]]],[[Q4S]]
,[CODE(HTTP)@en[[[BIND]]]],[[HTTP]]
,[CODE(HTTP)@en[[[BMOVE]]]],[[HTTP]]
,[CODE(HTTP)@en[[[BPROPFIND]]]],[[HTTP]]
,[CODE(HTTP)@en[[[BPROPPATCH]]]],[[HTTP]]
,[[BREW]] ,HTCPCP ([RFC 2324])
,[[BROWSE]] ,HTTP ([Gripes])
,[CODE(HTTP)@en[[[BWIDTH]]]],[[Q4S]]
,[[BYE]] ,"SIP ([RFC 2543], [IANAREG])"
,[[CANCEL]] ,"SIP ([RFC 2543], [IANAREG]),[[Q4S]]"
,[CODE(HTTP)@en[[[CHECKIN]]]],[[HTTP]]
,[CODE(HTTP)@en[[[CHECKOUT]]]],[[HTTP]]
,[[CONNECT]] ,HTTP ([RFC 2616] 予約)
,[CODE[[[COPY]]]] ,HTTP ([RFC 2518])
,[CODE[[[DELETE]]]] ,"HTTP ([RFC 2068], [RFC 2616]; [RFC 2518])"
,[[DESCRIBE]] ,RTSP ([RFC 2326])
,[CODE(HTTP)@en[[[X-MS-ENUMATTS]]]],[[HTTP]]
,[CODE[[[GET]]]] ,"HTTP ([HTTP/0.9], [RFC 1945], [RFC 2068], [RFC 2616]; [RFC 2518]), HTCPCP ([RFC 2324])"
,[[GET_PARAMETER]] ,RTSP ([RFC 2326])
,[CODE(HTTP)@en[[[GET-WITH-BODY]]]],"[[HTTP]]"
,[CODE[[[HEAD]]]] ,"HTTP ([RFC 2068], [RFC 2616]; [RFC 2518])"
,[[INFO]] ,"SIP ([RFC 2976], [IANAREG])"
,[[INVITE]] ,"SIP ([RFC 2543], [IANAREG])"
,[CODE(HTTP)@en[[[LABEL]]]],[[HTTP]]
,[[LINK]] ,HTTP ([RFC 2068] 参考)
,[CODE[[[LOCK]]]] ,HTTP (RFC 2518)
,[[M-*]] ,HTTP ([RFC 2774])
,[CODE(HTTP)[[[MDELETE]]]] ,HTTP ([[URIQA]])
,[CODE(HTTP)@en[[[MERGE]]]],[[HTTP]]
,[[M-GET]] ,HTTP ([RFC 2774])
,[CODE(HTTP)[[[MGET]]]] ,HTTP ([[URIQA]])
,[CODE[[[M-POST]]]],HTTP
,[[M-PUT]] ,HTTP ([RFC 2774])
,[CODE(HTTP)[[[MPUT]]]] ,HTTP ([[URIQA]])
,[[MESSAGE]] ,"SIP ([RFC 3428], [IANAREG])"
,[CODE(HTTP)@en[[[MKACTIVITY]]]],[[HTTP]]
,[CODE(HTTP)@en[[[MKCALENDAR]]]] ,[[HTTP]] ([[RFC 4791]])
,[CODE[[[MKCOL]]]] ,HTTP ([RFC 2518])
,[CODE(HTTP)@en[[[MKREDIRECTREF]]]],[[HTTP]]
,[CODE(HTTP)@en[[[MKWORKSPACE]]]],[[HTTP]]
,[CODE[[[MOVE]]]] ,HTTP ([RFC 2518])
,[CODE(HTTP)@en[[[NOTIFY]]]],"[[HTTP]], [[SIP]]"
,[[OPTIONS]] ,"HTTP ([RFC 2068], [RFC 2616]), RTSP ([RFC 2326]), SIP ([RFC 2543], [IANAREG])"
,[CODE(HTTP)@en[[[ORDERPATCH]]]],[[HTTP]]
,[[PATCH]] ,HTTP ([RFC 2068] 参考)
,[[PAUSE]] ,RTSP ([RFC 2326])
,[CODE(HTTP)@en[[[PEP]]]],[[HTTP]]
,[CODE(HTTP)@en[[[PEP-[VAR[*]]]]]],[[HTTP]]
,[CODE(HTTP)@en[[[PEP-PUT]]]],[[HTTP]]
,[CODE(HTTP)@en[[[PING]]]],[[Q4S]]
,[[PLAY]] ,RTSP ([RFC 2326])
,[CODE(HTTP)@en[[[POLL]]]],[[HTTP]]
,[[POST]] ,"HTTP ([RFC 2068], [RFC 2616]), HTCPCP ([RFC 2324]))"
,[[PRACK]] ,"SIP ([RFC 3262], [IANAREG])"
,[CODE[[[PROPFIND]]]] ,"HTCPCP ([RFC 2324]), HTTP ([RFC 2518])"
,[CODE[[[PROPPATCH]]]] ,HTTP ([RFC 2518])
,[CODE[[[PUT]]]] ,"HTTP ([RFC 2068], [RFC 2616]; [RFC 2518])"
,[CODE(HTTP)@en[[[Q4S-ALERT]]]],[[Q4S]]
,[CODE(HTTP)@en[[[READY]]]],[[Q4S]]
,[[RECORD]] ,RTSP ([RFC 2326])
,[[REDIRECT]] ,RTSP ([RFC 2326])
,[[REFER]] ,"SIP ([RFC 3315], [IANAREG])"
,[CODE(HTTP)@en[[[REBIND]]]],[[HTTP]]
,[[REGISTER]] ,"SIP ([RFC 2543], [IANAREG])"
,[CODE(HTTP)@en[[[REPORT]]]] ,[[HTTP]] ([[RFC 4791]])
,[CODE(HTTP)@en[[[RPC_IN_DATA]]]],[[HTTP]]
,[CODE(HTTP)@en[[[RPC_OUT_DATA]]]],[[HTTP]]
,[CODE[[[SEARCH]]]] ,HTTP (ワーム)
,[CODE(HTTP)@en[[[Secure]]]],[[S-HTTP]]
,[[SETUP]] ,RTSP ([RFC 2326])
,[[SET_PARAMETER]] ,RTSP ([RFC 2326])
,[CODE(HTTP)@en[[[SHOWMETHOD]]]],[[HTTP]]
,[CODE(HTTP)@en[[[SPACEJUMP]]]],[[HTTP]]
,[CODE(HTTP)@en[[[SUBSCRIBE]]]],"[[HTTP]], [[SIP]]"
,[[TEARDOWN]] ,RTSP ([RFC 2326])
,[CODE(HTTP)@en[[[TEXTSEARCH]]]],[[HTTP]]
,[[TRACE]] ,"HTTP ([RFC 2068], [RFC 2616])"
,[CODE(HTTP)@en[[[TRACK]]]],[[HTTP]]
,[CODE(HTTP)@en[[[UNBIND]]]],[[HTTP]]
,[CODE(HTTP)@en[[[UNCHECKOUT]]]],[[HTTP]]
,[[UNLINK]] ,HTTP ([RFC 2068] 参考)
,[CODE[[[UNLOCK]]]] ,HTTP ([RFC 2518])
,[CODE(HTTP)@en[[[UNSUBSCRIBE]]]],[[HTTP]]
,[CODE(HTTP)@en[[[UPDATE]]]],"[[HTTP]], [[SIP]]"
,[CODE(HTTP)@en[[[UPDATEREDIRECTREF]]]],[[HTTP]]
,[CODE(HTTP)@en[[[VERSION-CONTROL]]]],[[HTTP]]
,[[WHEN]] ,HTCPCP ([RFC 2324])
]FIG]
** 参考文献
[REFS[
- [511] [CITE[List of HTTP methods (verbs) — Anne’s Blog]] ([TIME[2012-02-19 14:31:55 +09:00]] 版) <http://annevankesteren.nl/2007/10/http-methods>
- [512] [CITE@en-us[WebDAV Methods]] ([TIME[2012-02-19 14:32:08 +09:00]] 版) <http://msdn.microsoft.com/en-us/library/aa142917.aspx>
]REFS]
* IANA 登録簿
[529] [[メソッド]]は、 [[IANA]] に登録する[RUBYB[べき]@en[ought to]]です [SRC[>>524]]。
[4] [[HTTP]]、[[RTSP]]、[[SIP]] で[[メソッド]]名は共通するものもありますが、
それぞれ別個の [[IANA登録簿]]が用意されています。
[REFS[
- [9] [CITE[Hypertext Transfer Protocol (HTTP) Method Registry]] ([TIME[2014-06-11 05:05:50 +09:00]] 版) <http://www.iana.org/assignments/http-methods/http-methods.xhtml>
- [509] [CITE[Real Time Streaming Protocol (RTSP)/1.0 Parameters]] <http://www.iana.org/assignments/rtsp-parameters>
- [508] <http://www.iana.org/assignments/sip-parameters>
]REFS]
;;
[507] [[HTTP]] と [[RTSP]] は当初登録簿がありませんでしたが、次第に整備されてゆきました。
[[HTTP]] の登録簿は [[RFC 7231]] で新設されました。
[10] [[HTTP]] の登録簿では、名前と出典の他に、[[安全なメソッド]]か否か、
[[冪等メソッド]]か否かも登録することになっています [SRC[>>8]]。
* データ
[520] [[メソッド]]の一覧とそれぞれの[[特性]]をまとめたデータが
[REFS[
- [CITE[data-web-defs/data/http-methods.json at master · manakai/data-web-defs]] ([TIME[2013-11-27 12:38:22 +09:00]] 版) <https://github.com/manakai/data-web-defs/blob/master/data/http-methods.json>
]REFS]
にあります。
* 歴史
** HTTP/0.9
[25] [[HTTP/0.9]] では [CODE(HTTP)@en[[[GET]]]] のみ認められていました [SRC[>>24]]。
;; [[HTTP/0.9]] も参照。
[REFS[
- [24] [CITE@en[RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0]] ([TIME[2014-09-07 13:12:32 +09:00]] 版) <http://tools.ietf.org/html/rfc1945#section-4.1>
]REFS]
** HTTP/1.0
[REFS[
- [517] [CITE[HTTP: A protocol for networked information: Predefined Methods]] ([TIME[1997-06-05 20:05:11 +09:00]] 版) <http://www.w3.org/Protocols/HTTP/Methods.html>
- [518] [[RFC 1945]]
]REFS]
** HTTP/1.1
[FIG(quote)[
[FIGCAPTION[
[502] RFC 1945 (HTTP/1.0); RFC 2068・2616 (HTTP/1.1) 5.1.1 Method
]FIGCAPTION]
> The Method token indicates the method to be performed on the resource
identified by the Request-URI. The method is case-sensitive.
[CODE(ABNF)[Method]] 字句は、 [CODE(ABNF)[[[Request-URI]]]]
で識別される[[資源]]に施される方式を示します。方式は大文字・小文字を区別します。
[DEL[
[DEL[
> [INS[{1945}]]
-
[PRE[
Method = "GET" ; Section 8.1
| "HEAD" ; Section 8.2
| "POST" ; Section 8.3
| extension-method
]PRE]
]DEL]
[INS[
> [INS[{2068}]]
-
[PRE[
Method = "OPTIONS" ; Section 9.2
| "GET" ; Section 9.3
| "HEAD" ; Section 9.4
| "POST" ; Section 9.5
| "PUT" ; Section 9.6
| "DELETE" ; Section 9.7
| "TRACE" ; Section 9.8
| extension-method
]PRE]
]INS]
]DEL]
[INS[
> [INS[{2616}]]
-
[PRE[
Method = "OPTIONS" ; Section 9.2
| "GET" ; Section 9.3
| "HEAD" ; Section 9.4
| "POST" ; Section 9.5
| "PUT" ; Section 9.6
| "DELETE" ; Section 9.7
| "TRACE" ; Section 9.8
| "CONNECT" ; Section 9.9
| extension-method
]PRE]
]INS]
>
- extension-method = token
> The list of methods [DEL[acceptable]] [INS[allowed]] by a [DEL[specific]] resource can [DEL[change dynamically; the client is notified through the return code of the response if a method is not allowed on a resource.]] [INS[be specified in an Allow header field (section 14.7). The return code of the response always notifies the client whether a method is currently allowed on a resource, since the set of allowed methods can change dynamically.]] [DEL[[INS[{1945,2068}]] Servers]] [INS[[INS[{2616}]] An origin server]] [DEL[should]] [INS[SHOULD]] return the status code [INS[405 (Method Not Allowed) if the method is known by the [INS[original]] server but not allowed for the requested resource, and]]
501 ([DEL[not implemented]] [INS[Not Implemented]]) if the method is unrecognized or not implemented [INS[by the [INS[original]] server]]. [DEL[[INS[[INS[{2068}]] The list of methods known by a server can be listed in a Public response-header field (section 14.35).]]]]
ある資源に認められる方式の目録は [CODE(HTTP)[[[Allow]]]] 頭欄に指定されます。
応答の復帰符号は方式が現在資源について認められているかどうかを常にクライアントに通知します。
認められる方式の集合は動的に変わり得るからです。
[[起源サーバー]]は、方式を起源サーバーが知っているがその要求された資源には認めない場合には [CODE(HTTP)[[[405]]]] (方式不認可)
[[状態符号]]を、起源サーバーが方式が認識できないか実装していない場合は
[CODE(HTTP)[[[501]]]] (未実装) 状態符号を返す'''べきです'''。[DEL[サーバーが知っている方式の目録は [CODE(HTTP)[[[Public]]]] 応答頭欄で列挙できます。]]
[DEL[
> [INS[{1945}]] The methods commonly used by HTTP/1.0 applications are fully defined in Section 8.
HTTP/1.0 応用が広く使っている方式は8章で完全に定義しています。
]DEL]
[INS[
> The methods GET and HEAD MUST be supported by all general-purpose
servers. All other methods are [DEL[optional]] [INS[OPTIONAL]]; however, if the above
methods are implemented, they MUST be implemented with the same
semantics as those specified in section 9.
方式 [CODE(HTTP)[[[GET]]]] および [CODE(HTTP)[[[HEAD]]]]
にすべての一般目的サーバーは対応しなければなりません。
他のすべての方式は'''[[任意選択]]'''です。しかし、
上の方式を実装する場合は、9章で規定する意味と同じに実装しなければ'''なりません'''。
]INS]
[INS[
注: 注記なき変更点は 1945 → 2068 の変更。
]INS]
]FIG]
[FIG(quote)[
[FIGCAPTION[
[6] RFC 1945 (HTTP/1.0) 8.; RFC 2068・2616 (HTTP/1.1) 9 Method Definitions
]FIGCAPTION]
> The set of common methods for [DEL[HTTP/1.0]] [INS[HTTP/1.1]] is defined below. Although
this set can be expanded, additional methods cannot be assumed to
share the same semantics for separately extended clients and servers.
HTTP の共通の方式 (method) の集合を次に定義します。
この集合は拡張可能ではありますが、追加の方式は別々の拡張されたクライアントやサーバーで同じ意味を共有しているとは仮定できません。
[INS[
> The Host request-header field (section 14.23) MUST accompany all
HTTP/1.1 requests.
[CODE(HTTP)[[[Host]]]] 要求頭欄はすべての HTTP/1.1
要求に伴わなければ'''なりません'''。
]INS]
]FIG]
*** RFC 2068・2616 (HTTP/1.1) 9.1 Safe and Idempotent Methods
→[CODE(WikiPage)[[[安全]]]]
*** RFC 1945 (HTTP/1.0) 9.1〜; RFC 2068・2616 (HTTP/1.1) 9.2〜
(各 method の定義 : 省略)
*** RFC 1945 (HTTP/1.0) D.1; RFC 2068 (HTTP/1.1) 19.6.1 Additional Request Methods
(各 method の定義 : 省略)
[FIG(quote)[
[FIGCAPTION[
[7] RFC 2616 (HTTP/1.1) 19.6.3 (抜粋)
]FIGCAPTION]
> The PATCH, LINK, UNLINK methods were defined but not commonly
implemented in previous versions of this specification. See RFC 2068 [33].
この仕様書の以前の版で
[CODE(HTTP)[[[PATCH]]]], [CODE(HTTP)[[[LINK]]]], [CODE(HTTP)[[[UNLINK]]]]
方式が定義されていましたが、広くは実装されていません。
[[RFC 2068]] 参照。
]FIG]
** RFC 723x
[19] [[RFC 2616]] の改訂である [[RFC 7231]] で [[HTTP]] [[要求メソッド]]の
[[IANA登録簿]]が初めて整備されました。
[20] [[RFC 723x]] 以外の従来の [[RFC]] で規定されていた[[要求メソッド]]は
[[RFC 7237]] により登録されています [SRC[>>18]]。
[REFS[
-[519] [CITE@en[draft-ietf-httpbis-method-registrations-13 - Initial Hypertext Transfer Protocol (HTTP) Method Registrations]]
( ([TIME[2013-09-25 22:18:51 +09:00]] 版))
<http://tools.ietf.org/html/draft-ietf-httpbis-method-registrations-13>
- [18] [CITE@en[RFC 7237 - Initial Hypertext Transfer Protocol (HTTP) Method Registrations]] ([TIME[2014-06-07 01:59:34 +09:00]] 版) <https://tools.ietf.org/html/rfc7237>
]REFS]
;; [21] [CODE(HTTP)@en[[[M-*]]]] [[メソッド群]]は登録されていないようです。
;; [22] [[RFC]] 化されていない[[メソッド]]は登録されていないようです。
* 関連
[535] [CODE(HTMLe)@en[[[form]]]] [[要素]]の [CODE(HTMLa)@en[[[method]]]]
[[属性]]は、元々は [[HTTP]] の[[メソッド]]から派生したものですが、
現在では必ずしも [[HTTP]] の[[メソッド]]とは対応しないものになっています。
[536] [CITE@en[Re: XMLHttpRequest: uppercasing method names]]
( ([[Boris Zbarsky]] 著, [TIME[2014-08-13 00:23:39 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-webapps/2014JulSep/0256.html>
[537] [CITE@en[Normalize method names as in XMLHttpRequest · 7a516d0 · whatwg/fetch]]
( ([TIME[2014-08-13 12:19:07 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/7a516d057f9c3441e0bc507c058d80a1045d9b46>
[538] [CITE@en[Normalizing method names is defined in Fetch now · 7281399 · whatwg/xhr]]
( ([TIME[2014-08-13 12:19:26 +09:00]] 版))
<https://github.com/whatwg/xhr/commit/7281399e252626393e994f53d0426e34d44793fb>
[539] [CITE@en[RFC 3507 - Internet Content Adaptation Protocol (ICAP)]]
( ([TIME[2014-06-08 07:17:07 +09:00]] 版))
<http://tools.ietf.org/html/rfc3507#section-4.3.2>
[540] [CITE[HTTP: A protocol for networked information: Predefined Methods]]
( ([TIME[1997-06-06 05:05:11 +09:00]] 版))
<http://www.w3.org/Protocols/HTTP/Methods.html>