/
467.txt
123 lines (88 loc) · 6.06 KB
/
467.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
[10] [DFN[[CODE(HTTP)@en[[[Meter:]]]]]] [[ヘッダー]]は、
[[起源鯖]]から[[串]]に対して[[応答]]回数の計測に関する指示を行ったり、
[[串]]から[[起源鯖]]に対して計測結果を報告したりするものです。
* 仕様書
[REFS[
- [2] [CITE@en[RFC 2227 - Simple Hit-Metering and Usage-Limiting for HTTP]]
( ([TIME[2011-12-18 04:36:26 +09:00]] 版))
<http://tools.ietf.org/html/rfc2227>
]REFS]
* 意味
[3] [CODE(HTTP)@en[[[Meter:]]]] は、[[キャッシュ]]によって[[利用者エージェント]]からのアクセスの情報が[[鯖]]に伝わらないことを防ぐため[[キャッシュ]]を無効化する [[cache-busting]]
がしばしば行われている [SRC[>>2]] として、その必要性を低めるための代替となる仕組みとして提案されました。
;; ただしすべての [[cache-busting]] を置き換えることを目的とするものではない [SRC[>>2]]
とされています。
[6] [CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]は、
[[起源鯖]]が[[串]]を通じて配信された回数を十分正確に取得する「hit-metering」や、
[[串]]が[[再検証]]なしに[[再利用]]できる回数を指定する「usage-limiting」
を実現します [SRC[>>2]]。
* 構文
[18] [CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]の値は、0個以上の[[指令]]の[[リスト]]
([CODE(HTTP)[#]]) です [SRC[>>2]]。
[FIG(railroad)[
= ?
== [[指令]]
== *
=== [[OWS]]
=== [CODE(HTTP)[[[,]]]]
=== [[OWS]]
=== [[指令]]
]FIG]
[21] 値が指定されない場合、 [CODE(HTTP)@en[[[will-report-and-limit]]]]
が指定されたのと等価です [SRC[>>2]]。
[22] 更に、 [CODE(HTTP)@en[[[Connection:]] [[Meter]]]] によって
[CODE(HTTP)@en[[[Meter:]]]] ([[空文字列]])
が暗示され、 [CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]は省略できます [SRC[>>2]]。
* 文脈
[20] [[串]]は計測や制限に対応していることを示すために [CODE(HTTP)@en[[[Meter:]]]]
[[ヘッダー]]を送信できます。どちらにも対応しない[[串]]は、
[CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]を送信しては[['''なりません''']] [SRC[>>2]]。
[11] [CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]を含む[[メッセージ]]は、
[CODE(HTTP)@en[[[Connection:]] [[meter]]]] を含まなければ[['''なりません''']] [SRC[>>2]]。
[12] [CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]は、
[[プロトコルの版]]が [[HTTP/1.1]] [[未満]]の[[メッセージ]]に含めては[['''なりません''']]
[SRC[>>2]]。
[19] この[[ヘッダー]]は複数指定できます [SRC[>>2]]。
* 計測部分木
[8] [[起源鯖]]を[[根]]とし、[[起源鯖]]からの[[応答]]の[[転送]]経路上にあって
[CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]による計測に対応した[[串]]によって構成される[[木]]のことを[DFN[[RUBYB[計測部分木]@en[metering subtree]]]]
[SRC[>>2]] といいます。
[9] [[起源鯖]]と[[利用者エージェント]]の間には、 [CODE(HTTP)@en[[[Meter:]]]]
[[ヘッダー]]に対応しない[[串]]や、対応しているものの[[上流]]に対応しない[[串]]が存在しているため対応できない[[串]]があるかもしれません。
[[計測部分木]]は、そのような[[串]]も含めた配送経路全体で構成される[[木]]の[[部分木]]となります。
* 処理モデル
[4] [CODE(HTTP)@en[[[Meter:]]]] は[[串]]または[[起源鯖]]に対するものです [SRC[>>2]]。
[[利用者エージェント]]には適用されません。
[13] [[プロトコルの版]]が [[HTTP/1.1]] [[未満]]の[[クライアント]]から送信された
[CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]を受け入れては[['''なりません''']] [SRC[>>2]]。
;; [14] これは、[CODE(HTTP)@en[[[Connection:]]]] を正しく処理できない [[HTTP/1.0]]
[[串]]があるためです [SRC[>>2]]。
** 起源鯖の処理
[23] [[起源鯖]]は、[[要求]]に [CODE(HTTP)@en[[[Meter]]]] が指定されている時、
[[下流]]に計測や制限を委ねるかどうか決定できます。委ねない場合
(や [CODE(HTTP)@en[[[Meter]]]] を実装しない場合) はただ単に
[CODE(HTTP)@en[[[Meter]]]] を無視して構いません [SRC[>>2]]。
** 串の処理
[5] [[串]]は [CODE(HTTP)@en[[[Meter:]]]] を実装しても構いませんが、
実装しなくても構いません [SRC[>>2]]。
[CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]を[[転送]]する[[串]]は、
[[RFC 2227]] に従わなければ[['''なりません''']] [SRC[>>2]]。
;; [7] [[起源鯖]]は [CODE(HTTP)@en[[[Connection:]] [[Meter]]]]
と指定しなければなりませんから、未対応の[[串]]は [CODE(HTTP)@en[[[Connection:]]]]
[[ヘッダー]]の規定に従い [CODE(HTTP)@en[[[Meter:]]]]
[[ヘッダー]]を[[転送]]時に削除します。
[24] [[串]]は計測や制限を行える時は、[[要求]]にその旨を含めます (>>20)。
[15] [[串]]は、計測や制限を行う[[応答]]を[[転送]]する際、
[[クライアント]] ([[串]]であれ[[利用者エージェント]]であれ) が[[計測部分木]]に含まれないなら、
[CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]を削除し、
[CODE(HTTP)@en[[[Cache-Control:]] [[s-maxage]]=0]]
を含めなければ[['''なりません''']] [SRC[>>2]]。
;; [16] これにより[[計測部分木]]外の[[共有キャッシュ]]は常に[[計測部分木]]内の[[鯖]]に[[再検証]]しなくてはならなくなりますから、
[[計測部分木]]内の[[串]]が常に計測できることとなります。
[17] [[串]]の[[下流]]に複数の[[計測部分木]]内の[[串]]がある場合、
利用可能回数を分配することができます。また計測結果は合算して[[上流]]に報告することとなります。
[SRC[>>2]]
* 歴史
[1] [CITE@en[draft-ietf-http-hit-metering-00 - Simple Hit-Metering and Usage-Limiting for HTTP]]
( ([TIME[2012-01-20 20:05:43 +09:00]] 版))
<http://tools.ietf.org/html/draft-ietf-http-hit-metering-00>