-
Notifications
You must be signed in to change notification settings - Fork 4
/
613.txt
126 lines (95 loc) · 7.99 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
[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>
- [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>
]REFS]
* 構文
[14] [CODE(HTTP)@en[[[HEAD]]]] [[要求]]の [[payload]] の意味は定義されていません [SRC[>>11]]。
[15] 実装によっては [[payload]] がある[[要求]]を拒絶することがあります [SRC[>>11]]。
* 性質
[25] 一般目的の[[鯖]]は、 [CODE(HTTP)@en[[[HEAD]]]] を実装しなければ[['''なりません''']]
[SRC[>>24]]。
[7] [CODE(HTTP)@en[[[HEAD]]]] [[メソッド]]は、[[安全なメソッド]]で [SRC[>>6]]、
[[冪等なメソッド]]です [SRC[>>8]]。
[10] [CODE(HTTP)@en[[[HEAD]]]] は、[[キャッシュ可能]]です [SRC[>>9, >>11]]。
[16] [[キャッシュ]]は、[CODE(HTTP)@en[[[Cache-Control:]]]] [[ヘッダー]]によって指定がある場合を除き、
[CODE(HTTP)@en[[[HEAD]]]] [[要求]]に対する[[応答]]を以後の [CODE(HTTP)@en[[[HEAD]]]]
[[要求]]の処理に用いて構いません。 [SRC[>>11]]
* 処理モデル
[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]]]] に対する[[応答]]の値ではありません。
[13] [[鯖]]は、 [CODE(HTTP)@en[[[GET]]]] [[要求]]だったとした場合に送られるのと同じ[[ヘッダー]]を[[応答]]に含めて送信する[['''べきです''']]。
ただし、 [[payload header]] は、省略して構いません。 [SRC[>>11]]
[17] [CODE(HTTP)@en[[[HEAD]]]] への[[応答]]は、以前の [CODE(HTTP)@en[[[GET]]]]
への[[応答]]の[[キャッシュ]]にも影響します [SRC[>>11]]。
[18] [CODE(HTTP)@en[[[GET]]]] への[[応答]]の[[キャッシュ]]を [CODE(HTTP)@en[[[HEAD]]]]
への[[応答]]のために用いることもできます。
* 歴史
[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]
* 実装
[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>