/
441.txt
178 lines (132 loc) · 9.04 KB
/
441.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
[17] [DFN[[CODE(HTTP)@en[[[Allow:]]]]]] [[ヘッダー]]は、
[[対象資源]]で使うことができる[[要求メソッド]]の一覧を表しています。
[18] この[[ヘッダー]]は [CODE(HTTP)[[[405]]]] [[応答]]などで用いられます。
* 仕様書
[REFS[
- [4] '''[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-7.4.1>'''
- [206] [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.7>
- [19] [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-6.5.5>
]REFS]
* 意味
[5] [CODE(HTTP)@en[[[Allow:]]]] [[ヘッダー]]は、[[対象資源]]が対応していると[[広告]]される[[要求メソッド]]の一覧を表しています
[SRC[>>4]]。
[9] なお、 [CODE(HTTP)@en[[[Allow:]]]] [[ヘッダー]]の値はその時点で[[鯖]]が認めると考える[[要求メソッド]]の一覧であって、
その後の任意の時点で同じく認められているという保証はありません。
認められる[[要求メソッド]]は時間の経過とともに変化しても構いません。
;; [10] また [CODE(HTTP)@en[[[Allow:]]]] の記述と実際に認められる[[要求メソッド]]が違っている可能性もあります。
もっともそのような実装は [[HTTP]] に適合しているとは言いがたく、
不具合というべきでしょう。 ([CODE(HTTP)@en[[[Allow:]]]] を返した直後に認められる[[要求メソッド]]が変化したと主張することはできますが、
常識的にはそのような主張を認めるべきではないでしょう。)
* 構文
[6] この[[ヘッダー]]の値は、[[要求メソッド]]名の0個以上の[[リスト]]
([CODE[#]]) です [SRC[>>4]]。
[FIG(railroad)[
= ?
== [[メソッド名]]
== *
=== [[OWS]]
=== [CODE[[[,]]]]
=== [[OWS]]
=== [[メソッド名]]
]FIG]
[11] 空の [CODE(HTTP)@en[[[Allow:]]]] [[ヘッダー]]は、どの[[要求メソッド]]も認められないことを表します。
これは設定によって一時的に[[資源]]が無効化されているときに起こり得ます。 [SRC[>>4]]
;; [12] 複数 [CODE(HTTP)@en[[[Allow:]]]] [[ヘッダー]]がある場合、
そのいずれもが空の場合を指していると推測されます。
;; [13] [[鯖]]は [CODE(HTTP)@en[[[GET]]]] と [CODE(HTTP)@en[[[HEAD]]]]
の[[実装]]が要求されていますが、[[対象資源]]が対応している必要はなく、
どの[[要求メソッド]]に対しても [CODE(HTTP)[[[405]]]]
を返すことはあり得るようです。
* 文脈
[406] [[起源鯖]]は、 [CODE(HTTP)[[[405]]]] [[応答]]で [CODE(HTTP)@en[[[Allow:]]]]
[[ヘッダー]]を[[生成]]しなければ[['''なりません''']] [SRC[>>4, >>19]]。
;; [20] これは実際には守られていないこともあるようです。
[8] [[起源鯖]]は、それ以外でも [CODE(HTTP)@en[[[Allow:]]]] [[ヘッダー]]を[[生成]]して構いません
[SRC[>>4]]。
[407] [CODE(HTTP)[[[501]]]] [[応答]]で [CODE(HTTP)@en[[[Allow:]]]]
[[ヘッダー]]が使われることがありますが、必須とはされていません。
[212] [[鯖]]は、 [CODE(HTTP)@en[[[OPTIONS]]]] [[要求]]に対して成功の[[応答]]を帰す場合には、
[[鯖]]が実装していて[[対象資源]]に適用できるオプション機能を示す[[ヘッダー]]
(例えば [CODE(HTTP)@en[[[Allow:]]]]) を送信する[['''べきです''']]
[SRC[>>206]]。
[7] この[[ヘッダー]]は、複数個指定できます。
* 処理モデル
[14] [[串]]は [CODE(HTTP)@en[[[Allow:]]]] [[ヘッダー]]を変更しては[['''なりません''']]
[SRC[>>4]]。
;; [15] [[串]]は[[要求メソッド]]に関わらない一般的な方法で[[メッセージ]]を処理できますから、
「対応する[[要求メソッド]]」という概念が存在していません。
[21] [[クライアント]]が [CODE(HTTP)@en[[[Allow:]]]] をどう使うべきなのか、
どのような利用法があるのかは明確ではありません。
* 歴史
** [CODE(HTTP)@en[Allowed:]] ヘッダー
[1] [[HTTP92]] では、 [CODE(HTTP)[Allow:]] という記述と
[DFN[[CODE(HTTP)@en[[[Allowed:]]]]]] という記述が混じっています。
[2] 歴史的には [CODE(HTTP)[Allow:]] が正しいです。
[FIG(quote)[
[FIGCAPTION[
[16] RFC 1945 (HTTP/1.0) 10.1; RFC 2068 (HTTP/1.1) 14.7 Allow
]FIGCAPTION]
> The Allow entity-header field lists the set of methods supported by
the resource identified by the Request-URI. The purpose of this field
is strictly to inform the recipient of valid methods associated with
the resource. The Allow header field [DEL[[INS[{1945}]] is not permitted in a request as part of a POST entity]] [INS[[INS[{2068〜}]] MUST be present in a 405 (Method Not Allowed) response]].
[CODE(HTTP)[Allow]] 実体頭欄は、 [[Request-URI]]
で識別される資源が対応している [[method]]
の集合を列挙します。この欄の目的は、
その資源に関連付けられた妥当な method
を受信者に厳密に通知することです。
[CODE(HTTP)[Allow]] 頭欄は、 [DEL[[INS[{1945}]] 要求の [[POST]] 実体の一部としては認めません。]] [INS[[INS[{2068〜}]] [CODE(HTTP)[[[405]]]] (Method 不認可) 応答中に出現しなければ'''なりません'''。]]
>
- [DEL[[INS[{〜2068}]] Allow = "Allow" ":" 1#method]]
- [INS[[INS[{2616}]] Allow = "Allow" ":" #Method]]
>Example of use: [INS[使用例 : ]]
>
- Allow: GET, HEAD[INS[, PUT [INS[{2068}]]]]
>This field cannot prevent a client from trying other methods.
However, the indications given by the Allow header field value [DEL[[INS[{1945}]] should]] [INS[[INS[{2068}]] SHOULD]]
be followed. The actual set of allowed methods is defined by the
origin server at the time of each request.
この欄は、クライアントアが他の method
を試行することを防ぐことは出来ません。
しかし、 [CODE(HTTP)[Allow]] 頭欄値による標示には従う'''べきです'''。
認められる method の実際の集合は、各要求の時点[[起源サーバー]]により定義されます。
[INS[
> [INS[{2068〜}]] The Allow header field MAY be provided with a PUT request to
recommend the methods to be supported by the new or modified
resource. The server is not required to support these methods and
SHOULD include an Allow header in the response giving the actual
supported methods.
[CODE(HTTP)[Allow]] 頭欄は、新規のまたは修正済みの資源が対応している
method を推奨するために [CODE(HTTP)[[[PUT]]]]
要求で提供しても'''構いません'''。
サーバーはそれらの method に対応する必要はありませんし、
応答中の [CODE(HTTP)[Allow]] 頭には実際に対応している
method を含める'''べきです'''。
]INS]
>A proxy [DEL[[INS[{1945}]] must not]] [INS[[INS[{2068}]] MUST NOT]] modify the Allow header field even if it does not
understand all the methods specified, since the user agent [DEL[[INS[{1945}]] may]] [DEL[[INS[[INS[{2068}]] MAY]]]] [INS[[INS[{2616}]] might]] have
other means of communicating with the origin server.
[[串]]は、指定された全ての method
を理解しないとしても、 [CODE(HTTP)[Allow]]
頭欄を修正しては'''なりません'''。
[[利用者エージェント]]はもしかすると起源サーバーと通信する他の手段を持っているかもしれないからです。
[DEL[
> [INS[{〜2068}]] The Allow header field does not indicate what methods are implemented [DEL[[INS[{1945}]] by]] [INS[[INS[{2068}]] at]] the server [INS[[INS[{2068}]] level]]. [INS[[INS[{2068}]] Servers MAY use the Public response-header field (section 14.35) to describe what methods are implemented on the server as a whole.]]
[CODE(HTTP)[Allow]] 頭欄は、サーバー段階でどの method
が実装されているかは示しません。サーバーは、
サーバー全体としてどの method を実装しているかを記述するのに、
[CODE(HTTP)[[[Public]]]] 応答頭欄を使っても'''構いません'''。
]DEL]
]FIG]
[502] [CITE@en[RFC 3507 - Internet Content Adaptation Protocol (ICAP)]]
( ([TIME[2014-06-08 07:17:07 +09:00]] 版))
<http://tools.ietf.org/html/rfc3507#page-14>
[503] [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.6>
* 関連
[3] [CODE(HTTP)@en[[[Allow]]]] に [CODE(HTTP)@en[[[PATCH]]]] が含まれる場合、
[CODE(HTTP)@en[[[Accept-Patch]]]] [[頭欄]]も[[応答]]に含める[['''べきです''']]
[SRC[[[RFC 5789]]]]。
[22] [[CORS]] では [CODE(HTTP)@en[[[Allow:]]]] ではなく、
[CODE(HTTP)@en[[[Access-Control-Allow-Methods:]]]] が使われます。