-
Notifications
You must be signed in to change notification settings - Fork 4
/
613.txt
226 lines (169 loc) · 13.3 KB
/
613.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
[12] [DFN[[CODE(HTTP)@en[[[HEAD]]]]]] [[メソッド]]は、[[資源]]の[[ヘッダー]]のみを返すことを[[要求]]するものです。
* 仕様書
[REFS[
- [24] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-07-01 17:07:49 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#page-22>
-- [11] '''[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.2>'''
-- [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>
-- [8] [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>
-- [9] [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.3>
- [5] [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.3>
- [27] [CITE@en[RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching]] ([TIME[2014-09-11 10:19:59 +09:00]] 版) <https://tools.ietf.org/html/rfc7234#section-4.3.5>
- [40] [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.4>
- [1] [CITE@en[RFC 3875 - The Common Gateway Interface (CGI) Version 1.1]] ([TIME[2011-11-20 06:09:05 +09:00]] 版) <http://tools.ietf.org/html/rfc3875#section-4.3.3>
- [42] [CITE@en-US[XMLHttpRequest Standard]] ([TIME[2015-01-14 22:14:17 +09:00]] 版) <https://xhr.spec.whatwg.org/#dom-xmlhttprequest-send>
- [43] [CITE@en-US[Fetch Standard]] ([TIME[2015-02-19 19:33:04 +09:00]] 版) <https://fetch.spec.whatwg.org/#dom-request>
]REFS]
* 意味
[36] [CODE(HTTP)@en[[[HEAD]]]] [[要求メソッド]]は、 [CODE(HTTP)@en[[[GET]]]]
[[要求メソッド]]が返すであろう[[応答]]の[[ヘッダー部]]のみを返すべきことを示します。
* 性質
[7] [CODE(HTTP)@en[[[HEAD]]]] [[メソッド]]は、[[安全なメソッド]]で [SRC[>>6]]、
[[冪等なメソッド]]です [SRC[>>8]]。
[10] [CODE(HTTP)@en[[[HEAD]]]] は、[[キャッシュ可能]]です [SRC[>>9, >>11]]。
* 構文
[14] [CODE(HTTP)@en[[[HEAD]]]] [[要求]]の [[payload]] の意味は定義されていません [SRC[>>11]]。
[15] 実装によっては [[payload]] がある[[要求]]を拒絶することがあります [SRC[>>11]]。
[44] [CODE(DOMi)@en[[[XMLHttpRequest]]]] および [CODE(DOMi)@en[[[Request]]]]
では、[[要求メッセージ]]の [[payload body]] を指定することはできません [SRC[>>42, >>43]]。
[16] [CODE(HTTP)@en[[[Content-Length:]]]] [[ヘッダー]]を指定することができますが、
[[メッセージ本体]]の長さではなく、 [CODE(HTTP)@en[[[GET]]]] [[要求]]だった場合に含まれるであろう
[[payload body]] の長さを表します。
;; [CODE(HTTP)@en[[[Content-Length:]]]] を参照。
* 文脈
[37] [[Webページ]]の[[更新チェック]]を行う[[利用者エージェント]]の中には、
[CODE(HTTP)@en[[[HEAD]]]] [[要求]]を送信して [CODE(HTTP)@en[[[Last-Modified:]]]]
の値を調べるものもあります。
[38] [CODE(HTTP)@en[[[Meter]]]] による[[キャッシュ]]の利用数の計測の仕組みでは、
[[串]]から[[鯖]]への計測数の報告に [CODE(HTTP)@en[[[HEAD]]]]
[[要求]]を使うことがあります。
* 処理
[25] 一般目的の[[鯖]]は、 [CODE(HTTP)@en[[[HEAD]]]] を実装しなければ[['''なりません''']]
[SRC[>>24]]。
;; [17] 実際には [[Web]] 上で普通に公開されている[[鯖]]であっても
[CODE(HTTP)@en[[[HEAD]]]] に対応しておらず [CODE(HTTP)[[[405]]]]
を返すことがあります。 ([[鯖]]は実装していて[[対象資源]]が実装していないだけだから仕様違反ではない、
とも解釈できるのでしょうか。いずれにせよ[[クライアント]]は[[鯖]]が
[CODE(HTTP)@en[[[HEAD]]]] に正しく[[応答]]することに依存できません。)
[2] [CODE(HTTP)@en[[[HEAD]]]] [[要求]]に対する[[応答]]は、
[[メッセージ本体]]を持ちません [SRC[>>5, >>11]]。
;; [3] [CODE(HTTP)@en[[[Content-Length:]]]] や [CODE(HTTP)@en[[[Transfer-Encoding:]]]]
や[[表現メタデータ]]を含んでいることもありますが、これらは [CODE(HTTP)@en[[[GET]]]]
[[要求]]だったとした場合の値であって、 [CODE(HTTP)@en[[[HEAD]]]] に対する[[応答]]の値ではありません。
[48] [CODE(HTTP)@en[[[HEAD]]]] [[要求]]に対する[[応答]]が [[HTTP/0.9]]
の場合、 [[Chrome]] も [[Firefox]] も [[IE]] も[[メッセージ本体]]が存在するものとして扱います。
[13] [[鯖]]は、 [CODE(HTTP)@en[[[GET]]]] [[要求]]だったとした場合に送られるのと同じ[[ヘッダー]]を[[応答]]に含めて送信する[['''べきです''']]。
ただし、 [[payload header]] は、省略して構いません。 [SRC[>>11]]
[41] [[WebDAV]] [[コレクション]]の場合でも、通常の[[資源]]と同じように処理することになっています [SRC[>>40]]。
[18] [CODE(HTTP)@en[[[GET]]]] への[[応答]]の[[キャッシュ]]を [CODE(HTTP)@en[[[HEAD]]]]
への[[応答]]のために用いることもできます。
[28] [[キャッシュ]]が [CODE(HTTP)@en[[[HEAD]]]] [[要求]]に対して
[CODE(HTTP)[[[200]]]] [[応答]]を受信した場合は、次のようにする[['''べきです''']]
[SRC[>>27]]。
[FIG(steps)[
= [29] 相当する [CODE(HTTP)@en[[[GET]]]] [[要求]]に対する[[蓄積された応答]]を選択します。
= [32] 各[[応答]]について、
== [30] [[検証子]]が新しい[[応答]]と一致するもので、
[CODE(HTTP)@en[[[Content-Length:]]]] [[ヘッダー]]が新しい[[応答]]一致するもの
(またはどちらも同[[ヘッダー]]がない場合) について、
=== [33] [[蓄積された応答]]から[[警告符号]] [CODE(HTTP)[[[1xx]]]] の
[CODE(HTTP)@en[[[Warning:]]]] [[ヘッダー]]があれば削除します。
=== [34] [CODE(HTTP)[[[304]]]] [[応答]]に含まれる[CODE(HTTP)@en[[[Warning:]]]]
以外の[[ヘッダー]]について、
[[蓄積された応答]]の対応する[[ヘッダー]]を置き換えます。
===- [35] ただし [CODE(HTTP)@en[[[Cache-Control:]]]] で制限されている場合を除きます。
== [31] それ以外の場合、[[蓄積された応答]]を[[腐敗]]とします。
]FIG]
* 歴史
[FIG(quote)[
[FIGCAPTION[
[4] RFC 1945 (HTTP/1.0) 8.2; RFC 2068 (HTTP/1.1) 9.4 HEAD
]FIGCAPTION]
> The HEAD method is identical to GET except that the server [DEL[must not]] [INS[MUST NOT]] return [DEL[any Entity-Body]] [INS[a message-body]]
in the response. The metainformation contained in the HTTP headers in response to a HEAD request [DEL[should]] [INS[SHOULD]]
be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the [DEL[resource identified]] [INS[entity implied]]
by the [DEL[Request-URI]] [INS[request]] without transferring the [DEL[Entity-Body]] [INS[entity-body]]
itself. This method is often used for testing hypertext links for validity,
accessibility, and recent modification.
[CODE(HTTP)[HEAD]] 方式は、サーバーが[[応答]]中で [CODE(ABNF)[[[message-body]]]]
を返しては'''ならない'''点を除いて、 [CODE(HTTP)[[[GET]]]] と同じです。
[CODE(HTTP)[HEAD]] 要求に対する応答の [[HTTP]] 頭並びに含まれる[[メタ情報]]は、
[CODE(HTTP)[GET]] 要求に対する応答で送られる情報と同じである'''べきです'''。
この方式は、要求で暗示した実体についてのメタ情報を
[CODE(ABNF)[[[entity-body]]]] 自体を転送せずに得ることができます。
この方式はしばしば[[ハイパーテキスト]]・[[リンク]]の妥当性,
接続可能性, 最近の修正の検査のために使われます。
[DEL[
> There is no "conditional HEAD" request analogous to the conditional
GET. If an If-Modified-Since header field is included with a HEAD
request, it should be ignored.
条件付 [CODE(HTTP)[GET]] に対応する「条件付 [CODE(HTTP)[HEAD]]」はありません。
[CODE(HTTP)[[[If-Modified-Since]]]] 頭欄が [CODE(HTTP)[HEAD]]
要求に含まれていても、無視するべきです。
]DEL]
[INS[
> The response to a HEAD request [DEL[may]] [INS[MAY]] be cach[INS[e]]able in the sense that the
information contained in the response [DEL[may]] [INS[MAY]] be used to update a
previously cached entity from that resource. If the new field values
indicate that the cached entity differs from the current entity (as
would be indicated by a change in Content-Length, Content-MD5, ETag
or Last-Modified), then the cache MUST treat the cache entry as stale.
[CODE(HTTP)[HEAD]] 要求に対する応答は、応答に含まれる情報を以前にその[[資源]]から[[キャッシュ]]した実体を更新するために使っても'''構わない'''という意味で[[キャッシュ可能]]です。
キャッシュした実体が現在の実体と異なることを新しい欄値が示していたら
([CODE(HTTP)[[[Content-Length]]]], [CODE(HTTP)[[[Content-MD5]]]],
[CODE(HTTP)[[[Content-MD5]]]], [CODE(HTTP)[[[ETag]]]] または
[CODE(HTTP)[[[Last-Modified]]]] の変更で示される)、
キャッシュはキャッシュ項目を[[腐敗]]したものとして扱わなければ'''なりません'''。
]INS]
]FIG]
[REFS[
- [45] [CITE@en[Disallow body when method is GET or HEAD for now https://www.w3.org/Bugs... · 3d9655c · whatwg/fetch]] ([TIME[2015-02-24 00:25:44 +09:00]] 版) <https://github.com/whatwg/fetch/commit/3d9655c4024e67fe4e20e8812e96e8ffa2b3cc0d>
]REFS]
* 実装
[19] [CODE(HTTP)@en[[[HEAD]]]] は、[[リンク先]]の存在確認や更新チェックなどの目的で使われることがあります。
[20] [CODE(HTTP)@en[[[HEAD]]]] は、[[本体]]が必要ない時に[[鯖]]の負荷の削減やネットワーク帯域の節約のために用いられることがあります。
ただし、[[鯖]]で動的に生成される[[資源]]が多いこんにち、 [CODE(HTTP)@en[[[HEAD]]]]
を用いることが負荷削減につながるかは怪しいところです。[[アプリケーション]]によっては
[CODE(HTTP)@en[[[HEAD]]]] を直接実装せずに、 [CODE(HTTP)@en[[[GET]]]]
と同様の処理をした結果から[[本体]]を除去して返すこともよくあります。
[21] 仕様上は [CODE(HTTP)@en[[[HEAD]]]] は実装しなければならないことになっていますが、
実際上は必ずしも実装されていません。実装されていたとしても、
[CODE(HTTP)@en[[[GET]]]] の場合と異なる結果を返すことがあります。
[22] そのため、 [CODE(HTTP)@en[[[HEAD]]]] のみで十分な情報が得られる場合であっても、
[CODE(HTTP)@en[[[GET]]]] を使うこともあります。
;; [23] 例えば [[HTML]] の [CODE(HTMLe)@en[[[title]]]] を取得したい場合のように、
[CODE(HTTP)@en[[[HEAD]]]] では十分な情報が得られず、 [CODE(HTTP)@en[[[GET]]]]
と[[範囲要求]]を用いた方が良いことも多々あります。
[26] [CITE[tus resumable upload protocol]]
( ([TIME[2014-06-23 00:14:49 +09:00]] 版))
<http://tus.io/protocols/resumable-upload.html#5-3-1>
[406] [CITE@en-US[wget –spider = Head Request : alexking.org]]
( ([TIME[2014-11-10 12:27:13 +09:00]] 版))
<http://alexking.org/blog/2005/03/11/wget-spider-head-request>
* 関連
[39] [CODE(HTTP)@en[[[HEAD]]]] [[要求]]は[[条件付き要求]]とすることができます。
そのような[[要求]]を[[条件付きHEAD]]と呼ぶことがあります。
[46] [CITE@en[Fix #44 in a better way. (Avoid "extracting" undefined.) · whatwg/fetch@b33de72]]
([TIME[2015-04-15 23:07:26 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/b33de725823d1a2ab99708b717e83112e4ebeb6b>
[47] [CITE@en[Also throw when new Request() is passed a Request instance with a non-nu... · whatwg/fetch@5be0642]]
([TIME[2015-04-15 23:07:46 +09:00]] 版)
<https://github.com/whatwg/fetch/commit/5be0642d1ad5b93ed8467ea9acc28f5786981599>
[49] [CITE@en[No longer include Content-Length for HEAD requests]]
([[annevk]]著, [TIME[2016-07-18 23:47:21 +09:00]])
<https://github.com/whatwg/fetch/commit/674b4d3f9606b22993bc61e135f2739b668c85a1>
[FIG(quote)[
[FIGCAPTION[
[50] [CITE@en[Webmention]]
([TIME[2017-01-11 04:06:01 +09:00]])
<https://webmention.net/draft/#h-sender-discovers-receiver-webmention-endpoint>
]FIGCAPTION]
> Senders may initially make an HTTP HEAD request '''['''RFC7231''']''' to check for the Link header before making a GET request.
]FIG]
[FIG(quote)[
[FIGCAPTION[
[51] [CITE@en[Webmention]]
([TIME[2017-01-11 04:06:01 +09:00]])
<https://webmention.net/draft/#h-limits-on-get-requests>
]FIGCAPTION]
> Receivers may make an initial HTTP HEAD request when verifying the link and decide whether to make a full GET request after initially inspecting the content type, length, or other HTTP headers returned.
]FIG]