/[suikacvs]/webroot/www/2004/id/draft-ietf-http-hit-metering-01.txt
Suika

Contents of /webroot/www/2004/id/draft-ietf-http-hit-metering-01.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations) (download)
Tue Jun 15 08:04:04 2004 UTC (19 years, 11 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
New

1
2 HTTP Working Group Jeffrey Mogul, DECWRL
3 Internet-Draft Paul J. Leach, Microsoft
4 Expires: 28 September 1997 19 March 1997
5
6
7 Simple Hit-Metering and Usage-Limiting for HTTP
8
9 draft-ietf-http-hit-metering-01.txt
10
11
12 STATUS OF THIS MEMO
13
14 This document is an Internet-Draft. Internet-Drafts are
15 working documents of the Internet Engineering Task Force
16 (IETF), its areas, and its working groups. Note that other
17 groups may also distribute working documents as
18 Internet-Drafts.
19
20 Internet-Drafts are draft documents valid for a maximum of
21 six months and may be updated, replaced, or obsoleted by
22 other documents at any time. It is inappropriate to use
23 Internet-Drafts as reference material or to cite them other
24 than as "work in progress."
25
26 To learn the current status of any Internet-Draft, please
27 check the "1id-abstracts.txt" listing contained in the
28 Internet-Drafts Shadow Directories on ftp.is.co.za
29 (Africa), nic.nordu.net (Europe), munnari.oz.au (Pacific
30 Rim), ds.internic.net (US East Coast), or ftp.isi.edu (US
31 West Coast).
32
33 Distribution of this document is unlimited. Please send
34 comments to the HTTP working group at
35 <http-wg@cuckoo.hpl.hp.com>. Discussions of the working
36 group are archived at
37 <URL:http://www.ics.uci.edu/pub/ietf/http/>. General
38 discussions about HTTP and the applications which use HTTP
39 should take place on the <www-talk@w3.org> mailing list.
40
41
42 ABSTRACT
43
44 This document proposes a simple extension to HTTP, using a
45 new ``Meter'' header, which permits a limited form of
46 demographic information (colloquially called
47 ``hit-counts'') to be reported by caches to origin servers,
48 in a more efficient manner than the ``cache-busting''
49 techniques currently used. It also permits an origin
50 server to control the number of times a cache uses a cached
51 response, and outlines a technique that origin servers can
52 use to capture referral information without
53 ``cache-busting.''
54
55
56
57 Mogul, Leach [Page 1]
58
59 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
60
61
62 TABLE OF CONTENTS
63
64 1 Introduction 3
65 1.1 Goals, non-goals, and limitations 3
66 1.2 Brief summary of the design 4
67 1.3 Terminology 5
68 2 Overview 6
69 2.1 Discussion 7
70 3 Design concepts 8
71 3.1 Implementation of the "metering subtree" 9
72 3.2 Format of the Meter header 10
73 3.3 Negotiation of hit-metering and usage-limiting 10
74 3.4 Transmission of usage reports 14
75 3.5 When to send usage reports 15
76 3.6 Subdivision of usage-limits 17
77 4 Analysis 18
78 4.1 Approximation accuracy for counting users 18
79 4.2 What about "Network Computers"? 19
80 4.3 Critical-path delay analysis 20
81 5 Specification 21
82 5.1 Specification of Meter header and directives 21
83 5.2 Abbreviations for Meter directives 23
84 5.3 Counting rules 24
85 5.3.1 Counting rules for hit-metering 25
86 5.3.2 Counting rules for usage-limiting 25
87 5.3.3 Equivalent algorithms are allowed 26
88 5.4 Counting rules: interaction with Range requests 27
89 5.5 Implementation by non-caching proxies 27
90 5.6 Implementation by cooperating caches 28
91 6 Expressing or approximating the "proxy-mustcheck" directive 28
92 7 Examples 28
93 7.1 Example of a complete set of exchanges 28
94 7.2 Protecting against HTTP/1.0 proxies 30
95 7.3 More elaborate examples 31
96 8 Interactions with content negotiation 31
97 8.1 Treatment of responses carrying a Vary header 32
98 8.2 Interaction with Transparent Content Negotiation 33
99 9 A Note on Capturing Referrals 33
100 10 Alternative proposals 34
101 11 Security Considerations 34
102 12 Revision history 35
103 12.1 draft-ietf-http-hit-metering-01.txt 35
104 12.2 draft-ietf-http-hit-metering-00.txt 35
105 12.3 draft-mogul-http-hit-metering-00.txt 36
106 13 Acknowledgements 36
107 14 References 36
108 15 Authors' addresses 37
109
110
111
112
113
114 Mogul, Leach [Page 2]
115
116 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
117
118
119 1 Introduction
120
121 For a variety of reasons, content providers want to be able to
122 collect information on the frequency with which their content is
123 accessed. This desire leads to some of the "cache-busting" done by
124 existing servers. ("Cache-busting" is the use by servers of
125 techniques intended to prevent caching of responses; it is unknown
126 exactly how common this is.) This kind of cache-busting is done not
127 for the purpose of maintaining transparency or security properties,
128 but simply to collect demographic information. Some cache-busting is
129 also done to provide different advertising images to appear on the
130 same page (i.e., each retrieval of the page sees a different ad).
131
132 This proposal supports a model similar to that of publishers of
133 hard-copy publications: such publishers (try to) report to their
134 advertisers how many people read an issue of a publication at least
135 once; they don't (try to) report how many times a reader re-reads an
136 issue. They do this by counting copies published, and then try to
137 estimate, for their publication, on average how many people read a
138 single copy at least once. The key point is that the results aren't
139 exact, but are still useful. Another model is that of coding
140 inquiries in such a way that the advertiser can tell which
141 publication produced the inquiry.
142
143 1.1 Goals, non-goals, and limitations
144 HTTP/1.1 already allows origin servers to prevent caching of
145 responses, and evidence exists [8] that at least some of the time,
146 this is being done for the sole purpose of collecting counts of the
147 number of accesses of specific pages. Some of this evidence is
148 inferred from the study of proxy traces; some is based on explicit
149 statements of the intention of the operators of Web servers.
150 Information collected this way might or might not be of actual use to
151 the people who collect it; the fact is that they want to collect it,
152 or already do so.
153
154 The goal of this proposal is to provide an optional performance
155 optimization for this use of HTTP/1.1.
156
157 This specification is:
158
159 - Optional: no server or proxy is required to implement it.
160
161 - Proxy-centered: there is no involvement on the part of
162 end-client implementations.
163
164 - Solely a performance optimization: it provides no
165 information or functionality that is not already available
166 in HTTP/1.1. The intent is to improve performance overall,
167 and reduce latency for almost all interactions; latency
168 might be increased for a small fraction of HTTP
169 interactions.
170
171 Mogul, Leach [Page 3]
172
173 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
174
175
176 - Best-efforts: it does not guarantee the accuracy of the
177 reported information, although it does provide accurate
178 results in the absence of persistent network failures or
179 host crashes.
180
181 - Neutral with respect to privacy: it reveals to servers no
182 information about clients that is not already available
183 through the existing features of HTTP/1.1.
184
185 ---------
186 Review note: To the extent that any part of this specification
187 conflicts with these criteria, this is a bug, and will be
188 resolved when brought to the attention of the authors.
189 ---------
190
191 The goals of this specification do not include:
192
193 - Solving the entire problem of efficiently obtaining
194 extensive information about requests made via proxies.
195
196 - Improving the protection of user privacy (although our
197 proposal may reduce the transfer of user-specific
198 information to servers, it does not prevent it).
199
200 - Preventing or encouraging the use of log-exchange
201 mechanisms.
202
203 - Avoiding all forms of "cache-busting", or even all
204 cache-busting done for gathering counts.
205
206 This design has certain potential limitations:
207
208 - If it is not deployed widely in both proxies and servers,
209 it will provide little benefit.
210
211 - It may, by partially solving the hit-counting problem,
212 reduce the pressure to adopt more complete solutions, if
213 any become available.
214
215 - Even if widely deployed, it might not be widely used, and
216 so might not significantly improve performance.
217
218 These potential limitations might not be problems in actual practice.
219
220 1.2 Brief summary of the design
221 This section is included for people not wishing to read the entire
222 document; it is not a specification for the proposed design, and
223 over-simplifies many aspects of the design.
224
225 The goal of this design is to eliminate the need for origin servers
226 to use "cache-busting" techniques, when this is done just for the
227
228 Mogul, Leach [Page 4]
229
230 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
231
232
233 purpose of counting the number of users of a resource.
234 (Cache-busting includes techniques such as setting immediate
235 Expiration dates, or sending "Cache-control: private" in each
236 response.)
237
238 The design adds a new "Meter" header to HTTP; the header is always
239 protected by the "Connection" header, and so is always hop-by-hop.
240 This mechanism allows the construction of a "metering subtree", which
241 is a connected subtree of proxies, rooted at an origin server. Only
242 those proxies that explicitly volunteer to join in the metering
243 subtree for a resource participate in hit-metering, but those proxies
244 that do volunteer are required to make their best effort to provide
245 accurate counts. When a hit-metered response is forwarded outside of
246 the metering subtree, the forwarding proxy adds "Cache-control:
247 proxy-maxage=0", so that other proxies (outside the metering subtree)
248 are forced to forward all requests to a server in the metering
249 subtree.
250
251 ---------
252 NOTE: the HTTP/1.1 specification does not currently define a
253 "proxy-maxage" Cache-control directive. A separate proposal
254 has been made, on various grounds, to add such a directive to
255 the next revision of the HTTP/1.1 specification [6].
256 ---------
257
258 The Meter header carries zero or more directives, similar to the way
259 that the Cache-control header carries directives. Proxies may use
260 certain Meter directives to volunteer to do hit-metering for a
261 resource. If a proxy does volunteer, the server may use certain
262 directives to require that a response be hit-metered. Finally,
263 proxies use a "count" Meter directive to report the accumulated hit
264 counts.
265
266 The Meter mechanism can also be used by a server to limit the number
267 of uses that a cache may make of a cached response, before
268 revalidating it.
269
270 The full specification includes complete rules for counting "uses" of
271 a response (e.g., non-conditional GETs) and "reuses" (conditional
272 GETs). These rules ensure that the results are entirely consistent
273 in all cases, except when systems or networks fail.
274
275 1.3 Terminology
276 This document uses terms defined and explained in the HTTP/1.1
277 specification [3], including ``origin server,'' ``resource,''
278 ``hop-by-hop,'' ``unconditional GET,'' and ``conditional GET.'' The
279 reader is expected to be familiar with the HTTP/1.1 specification and
280 its terminology.
281
282
283
284
285 Mogul, Leach [Page 5]
286
287 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
288
289
290 2 Overview
291
292 The design described in this document introduces several new features
293 to HTTP:
294
295 - Hit-metering: allows an origin server to obtain reasonably
296 accurate counts of the number of clients using a resource
297 instance via a proxy cache, or a hierarchy of proxy caches.
298
299 - Usage-limiting: allows an origin server to control the
300 number of times a cached response may be used by a proxy
301 cache, or a hierarchy of proxy caches, before revalidation
302 with the origin server.
303
304 These new non-mandatory features require minimal new protocol
305 support, no change in protocol version, relatively little overhead in
306 message headers. The design adds no additional network round-trips
307 in any critical path that directly affects user-perceived latency
308 (see section 4.3 for an analysis).
309
310 The primary goal of hit-metering and usage-limiting is to obviate the
311 need for an origin server to send "Cache-control: proxy-maxage=0"
312 with responses for resources whose value is not likely to change
313 immediately. In other words, in cases where the only reason for
314 contacting the origin server on every request that might otherwise be
315 satisfied by a proxy cache entry is to allow the server to collect
316 demographic information or to control the number of times a cache
317 entry is used, the extension proposed here will avoid a significant
318 amount of unnecessary network traffic and latency.
319
320 This design introduces one new ``Meter'' header, which is used both
321 in HTTP request messages and HTTP response messages. The Meter
322 header is used to transmit a number of directives and reports. In
323 particular, all negotiation of the use of hit-metering and usage
324 limits is done using this header. No other changes to the existing
325 HTTP/1.1 specification [3] are proposed in this document.
326
327 This design also introduces several new concepts:
328
329 1. The concepts of a "use" of a cache entry, which is when a
330 proxy returns its entity-body in response to a conditional
331 or non-conditional request, and the "reuse" of a cache
332 entry, which is when a proxy returns a 304 (Not Modified)
333 response to a conditional request which is satisfied by
334 that cache entry.
335
336 2. The concept of a hit-metered resource, for which proxy
337 caches make a best-effort attempt to report accurate
338 counts of uses and/or reuses to the origin server.
339
340
341
342 Mogul, Leach [Page 6]
343
344 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
345
346
347 3. The concept of a usage-limited resource, for which the
348 origin server expects proxy caches to limit the number of
349 uses and/or reuses.
350
351 The new Meter directives and reports interact to allow proxy caches
352 and servers to cooperate in the collection of demographic data. The
353 goal is a best-efforts approximation of the true number of uses
354 and/or reuses, not a guaranteed exact count.
355
356 The new Meter directives also allow a server to bound the inaccuracy
357 of a particular hit-count, by bounding the number of uses between
358 reports. It can also, for example, bound the number of times the
359 same ad is shown because of caching.
360
361 Section 8.1 describes a way to use server-driven content negotiation
362 (the Vary header) that allows an HTTP origin server to flexibly
363 separate requests into categories and count requests by category.
364 Implementation of such a categorized hit counting is likely to be a
365 very small modification to most implementations of Vary; some
366 implementations may not require any modification at all.
367
368 2.1 Discussion
369 Mapping this onto the publishing model, a proxy cache would increment
370 the use-count for a cache entry once for each unconditional GET done
371 for the entry, and once for each conditional GET that results in
372 sending a copy of the entry to update a client's invalid cached copy.
373 Conditional GETs that result in 304 (Not Modified) are not included
374 in the use-count, because they do not result in a new user seeing the
375 page, but instead signify a repeat view by a user that had seen it
376 before. However, 304 responses are counted in the reuse-count.
377 HEADs are not counted at all, because their responses do not contain
378 an entity-body.
379
380 The Meter directives apply only to shared proxy caches, not to
381 end-client (or other single-user) caches. Single user caches should
382 not use Meter, because their hits will be automatically counted as a
383 result of the unconditional GET with which they first fetch the page,
384 from either the origin-server or from a proxy cache. Their
385 subsequent conditional GETs do not result in a new user seeing the
386 page.
387
388 ---------
389 Discussion point: this means that the reuse-count does not
390 include reuses done locally to the end-client. While there are
391 some reasons to want to collect such information, especially
392 for research into user behavior patterns, we believe that the
393 reasons against doing so (network overheads, additional client
394 complexity, and possible privacy issues) are stronger.
395 However, we encourage further discussion of this issue.
396 ---------
397
398
399 Mogul, Leach [Page 7]
400
401 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
402
403
404 The mechanism specified here counts GETs; other methods either do not
405 result in a page for the user to read, aren't cached, or are
406 "written-through" and so can be directly counted by the origin
407 server. (If, in the future, a "cachable POST" came into existence,
408 whereby the entity-body in the POST request was used to select a
409 cached response, then such POSTs would have to be treated just like
410 GETs.) The applicability of hit-metering to any new HTTP methods
411 that might be defined in the future is currently unspecifiable.
412
413 In the case of multiple caches along a path, a proxy cache does the
414 obvious summation when it receives a use-count or reuse-count in a
415 request from another cache.
416
417
418 3 Design concepts
419
420 In order to allow the introduction of hit-metering and usage-limiting
421 without requiring a protocol revision, and to ensure a reasonably
422 close approximation of accurate counts, the negotiation of metering
423 and usage-limiting is done hop-by-hop, not end-to-end. If one
424 considers the "tree" of proxies that receive, store, and forward a
425 specific response, the intent of this design is that within some
426 (possibly null) "metering subtree", rooted at the origin server, all
427 proxies are using the hit-metering and/or usage-limiting requested by
428 the origin server.
429
430 Proxies at the leaves of this subtree will insert a "Cache-control:
431 proxy-maxage=0" directive, which forces all other proxies (below this
432 subtree) to check with a leaf of the metering subtree on every
433 request. However, it does not prevent them from storing and using
434 the response, if the revalidation succeeds.
435
436 No proxy is required to implement hit-metering or usage-limiting.
437 However, any proxy that transmits the Meter header in a request MUST
438 implement every unconditional requirement of this specification,
439 without exception or amendment.
440
441 This is a conservative design, which may sometimes fail to take
442 advantage of hit-metering support in proxies outside the metering
443 subtree. However, it is likely that without the reliability offered
444 by a conservative design, managers of origin servers with
445 requirements for accurate approximations will not take advantage of
446 any hit-metering proposal.
447
448 The hit-metering/usage-limiting mechanism is designed to avoid any
449 extra network round-trips in the critical path of any client request,
450 and (as much as possible) to avoid excessively lengthening HTTP
451 messages.
452
453 The Meter header is used to transmit both negotiation information and
454 numeric information.
455
456 Mogul, Leach [Page 8]
457
458 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
459
460
461 A formal specification for the Meter header appears in section 5; the
462 following discussion uses an informal approach to improve clarity.
463
464 3.1 Implementation of the "metering subtree"
465 The "metering subtree" approach is implemented in a simple,
466 straightforward way by defining the new "Meter" header as one that
467 MUST always be protected by a Connection header in every request or
468 response. I.e., if the Meter header is present in an HTTP message,
469 that message:
470
471 1. MUST contain "Connection: meter", and MUST be handled
472 according to the HTTP/1.1 specification of the Connection
473 header.
474
475 2. MUST NOT be sent in response to a request from a client
476 whose version number is less than HTTP/1.1.
477
478 3. MUST NOT be accepted from a client whose version number is
479 less than HTTP/1.1.
480
481 The reason for the latter two restrictions is to protect against
482 proxies that might not properly implement the Connection header.
483 Otherwise, a subtree that includes an HTTP/1.0 proxy might
484 erroneously appear to be a metering subtree.
485
486 ---------
487 Note: It appears that for the Connection header mechanism to
488 function correctly, a system receiving an HTTP/1.0 (or
489 lower-version) message that includes a Connection header must
490 act as if this header, and all of the headers it protects,
491 ought to have been removed from the message by an intermediate
492 proxy.
493
494 Although RFC2068 does not specifically require this behavior,
495 it appears to be implied. Otherwise, one could not depend on
496 the stated property (section 14.10) that the protected options
497 ``MUST NOT be communicated by proxies over further
498 connections.'' This should probably be clarified in a
499 subsequent draft of the HTTP/1.1 specification.
500
501 This specification does not, in any way, propose a modification
502 of the specification of the Connection header.
503 ---------
504
505 From the point of view of an origin server, the proxies in a metering
506 subtree work together to obey usage limits and to maintain accurate
507 usage counts. When an origin server specifies a usage limit, a proxy
508 in the metering subtree may subdivide this limit among its children
509 in the subtree as it sees fit. Similarly, when a proxy in the
510 subtree receives a usage report, it ensures that the hits represented
511 by this report are summed properly and reported to the origin server.
512
513 Mogul, Leach [Page 9]
514
515 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
516
517
518 When a proxy forwards a hit-metered or usage-limited response to a
519 client (proxy or end-client) not in the metering subtree, it MUST
520 omit the Meter header, and it MUST add "Cache-control:
521 proxy-maxage=0" to the response.
522
523 ---------
524 Design question: alternatively, we could specify that the
525 origin server is responsible for adding "Cache-control:
526 proxy-maxage=0" to the response, and that a proxy in the
527 metering subtree should ignore this directive, unless it has
528 exhausted one of the usage limits. This would get the proxies
529 out of the business of adding headers to responses, but it
530 would increase the number of bytes in the response from the
531 origin server.
532 ---------
533
534 3.2 Format of the Meter header
535 The Meter header is used to carry zero or more directives. Multiple
536 Meter headers may occur in an HTTP message, but according to the
537 rules in section 4.2 of the HTTP/1.1 specification [3], they may be
538 combined into a single header (and should be so combined, to reduce
539 overhead).
540
541 For example, the following sequence of Meter headers
542
543 Meter: max-uses=3
544 Meter: max-reuses=10
545 Meter: do-report
546
547 may be expressed as
548
549 Meter: max-uses=3, max-reuses=10, do-report
550
551 3.3 Negotiation of hit-metering and usage-limiting
552 An origin server that wants to collect hit counts for a resource, by
553 simply forcing all requests to bypass any proxy caches, would respond
554 to requests on the resource with "Cache-control: proxy-maxage=0".
555 (An origin server wishing to prevent HTTP/1.0 proxies from improperly
556 caching the response could also send both "Expires: <now>", to
557 prevent such caching, and "Cache-control: max-age=NNNN", to allow
558 newer proxies to cache the response).
559
560 The purpose of the Meter header is to obviate the need for
561 "Cache-control: proxy-maxage=0" within a metering subtree. Thus, any
562 proxy may negotiate the use of hit-metering and/or usage-limiting
563 with the next-hop server. If this server is the origin server, or is
564 already part of a metering subtree (rooted at the origin server),
565 then it may complete the negotiation, thereby extending the metering
566 subtree to include the new proxy.
567
568
569
570 Mogul, Leach [Page 10]
571
572 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
573
574
575 To start the negotiation, a proxy sends its request with one of the
576 following Meter directives:
577
578 will-report-and-limit
579 indicates that the proxy is willing and able to
580 return usage reports and will obey any usage-limits.
581
582 wont-report indicates that the proxy will obey usage-limits but
583 will not send usage reports.
584
585 wont-limit indicates that the proxy will not obey usage-limits
586 but will send usage reports.
587
588 A proxy willing to neither obey usage-limits nor send usage reports
589 MUST NOT transmit a Meter header in the request.
590
591 By definition, an empty Meter header:
592
593 Meter:
594
595 is equivalent to "Meter: will-report-and-limit", and so, by the
596 definition of the Connection header (see section 14.10 of the
597 HTTP/1.1 specification [3]), a request that contains
598
599 Connection: Meter
600
601 and no explicit Meter header is equivalent to a request that contains
602
603 Connection: Meter
604 Meter: will-report-and-limit
605
606 This makes the default case more efficient.
607
608 An origin server that is not interested in metering or usage-limiting
609 the requested resource simply ignores the Meter header.
610
611 If the server wants the proxy to do hit-metering and/or
612 usage-limiting, its response should include one or more of the
613 following Meter directives:
614
615 For hit-metering:
616
617 do-report specifies that the proxy MUST send usage reports to
618 the server.
619
620 dont-report specifies that the proxy SHOULD NOT send usage
621 reports to the server.
622
623 timeout=NNN sets a metering timeout of NNN minutes, from the time
624 that this response was originated, for the reporting
625 of a hit-count. If the proxy has a non-zero hit
626
627 Mogul, Leach [Page 11]
628
629 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
630
631
632 count for this response when the timeout expires, it
633 MUST send a report to the server at or before that
634 time. Implies "do-report".
635
636 By definition, an empty Meter header in a response, or any Meter
637 header that does not contain "dont-report", means "Meter: do-report";
638 this makes a common case more efficient.
639
640 ---------
641 Note: an origin server using the metering timeout mechanism to
642 bound the collection period over which hit-counts are obtained
643 should adjust the timeout values in the responses it sends so
644 that all responses generated within that period reach their
645 metering timeouts at or before the end of that period.
646
647 If the origin server simply sends a constant metering timeout T
648 with each response for a resource, the reports that it receives
649 will reflect activity over a period whose duration is between T
650 and N*T (in the worst case), where N is the maximum depth of
651 the metering subtree.
652 ---------
653
654 For usage-limiting
655
656 max-uses=NNN sets an upper limit of NNN "uses" of the response,
657 not counting its immediate forwarding to the
658 requesting end-client, for all proxies in the
659 following subtree taken together.
660
661 max-reuses=NNN sets an upper limit of NNN "reuses" of the response
662 for all proxies in the following subtree taken
663 together.
664
665 When a proxy has exhausted its allocation of "uses" or "reuses" for a
666 cache entry, it MUST revalidate the cache entry (using a conditional
667 request) before returning it in a response. (The proxy SHOULD use
668 this revalidation message to send a usage report, if one was
669 requested and it is time to send it. See sections 3.4 and 3.5.)
670
671 These Meter response-directives apply only to the specific response
672 that they are attached to.
673
674 ---------
675 Note that the limit on "uses" set by the max-uses directive
676 does not include the use of the response to satisfy the
677 end-client request that caused the proxy's request to the
678 server. This counting rule supports the notion of a
679 cache-initiated prefetch: a cache may issue a prefetch request,
680 receive a max-uses=0 response, store that response, and then
681 return that response (without revalidation) when a client makes
682 an actual request for the resource. However, each such
683
684 Mogul, Leach [Page 12]
685
686 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
687
688
689 response may be used at most once in this way, so the origin
690 server maintains precise control over the number of actual
691 uses.
692 ---------
693
694 A server MUST NOT send a Meter header that would require a proxy to
695 do something that it has not yet offered to do. A proxy receiving a
696 Meter response-directive asking the proxy to do something it did not
697 volunteer to do SHOULD ignore that directive.
698
699 A proxy receiving a Meter header in a response MUST either obey it,
700 or it MUST revalidate the corresponding cache entry on every access.
701 (I.e., if it chooses not to obey the Meter header in a response, it
702 MUST act as if the response included "Cache-control:
703 proxy-maxage=0".)
704
705 ---------
706 Note: a proxy that has not sent the Meter header in a request
707 for the given resource,and which has therefore not volunteered
708 to honor Meter directives in a response, is not required to
709 honor them. If, in this situation, the server does send a
710 Meter header in a response, this is a protocol error. However,
711 based on the robustness principle, the proxy may choose to
712 interpret the Meter header as an implicit request to include
713 "Cache-control: proxy-maxage=0" when it forwards the response,
714 since this preserves the apparent intention of the server.
715 ---------
716
717 A proxy that receives the Meter header in a request may ignore it
718 only to the extent that this is consistent with its own duty to the
719 next-hop server. If the received Meter header is inconsistent, or no
720 Meter header is received and the next-hop server has requested any
721 metering or limiting, then the proxy MUST add "Cache-control:
722 proxy-maxage=0" to all responses it sends for the resource. (A proxy
723 SHOULD NOT add or change the Expires header or max-age Cache-control
724 directive.)
725
726 ---------
727 For example, if proxy A receives a GET request from proxy B for
728 URL X with "Connection: Meter", but proxy A's cached response
729 for URL does not include any Meter directives, then proxy A may
730 ignore the metering offer from proxy B.
731
732 However, if proxy A has previously told the origin server
733 "Meter: wont-limit" (implying will-report), and the cached
734 response contains "Meter: do-report", and proxy B's request
735 includes "Meter: wont-report", then proxy B's offer is
736 inconsistent with proxy A's duty to the origin server.
737 Therefore, in this case proxy A must add "Cache-control:
738 proxy-maxage=0" when it returns the cached response to proxy B,
739 and must not include a Meter header in this response.
740 ---------
741 Mogul, Leach [Page 13]
742
743 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
744
745
746 If a server does not want to use the Meter mechanism, and will not
747 want to use it any time soon, it may send this directive:
748
749 wont-ask recommends that the proxy SHOULD NOT send any Meter
750 directives to this server.
751
752 The proxy SHOULD remember this fact for up to 24 hours. This avoids
753 virtually all unnecessary overheads for servers that do not wish to
754 use or support the Meter header. (This directive also implies
755 ``dont-report''.)
756
757 3.4 Transmission of usage reports
758 To transmit a usage report, a proxy sends the following Meter header
759 in a request on the appropriate resource:
760
761 Meter: count=NNN/MMM
762
763 The first integer indicates the count of uses of the cache entry
764 since the last report; the second integer indicates the count of
765 reuses of the entry (see section 5.3 for rules on counting uses and
766 reuses). The transmission of a "count" directive in a request with
767 no other Meter directive is also defined as an implicit transmission
768 of a "will-report-and-limit" directive, to optimize the common case.
769 (A proxy not willing to honor usage-limits would send "Meter:
770 count=NNN/MMM, wont-limit" for its reports.)
771
772 Note that when a proxy forwards a client's request and receives a
773 response, the response that the proxy sends immediately to the
774 requesting client is not counted as a "use". I.e., the reported
775 count is the number of times the cache entry was used, and not the
776 number of times that the response was used.
777
778 A proxy SHOULD NOT transmit "Meter: count=0/0", since this conveys no
779 useful information.
780
781 Usage reports MUST always be transmitted as part of a conditional
782 request (such as a GET or HEAD), since the information in the
783 conditional header (e.g., If-Modified-Since or If-None-Match) is
784 required for the origin server to know which instance of a resource
785 is being counted. Proxys forwarding usage reports up the metering
786 subtree MUST NOT change the contents of the conditional header, since
787 otherwise this would result in incorrect counting.
788
789 A usage report MUST NOT be transmitted as part of a forwarded request
790 that includes multiple entity tags in an If-None-Match or If-Match
791 header.
792
793 ---------
794 Note: a proxy that offers its willingness to do hit-metering
795 (report usage) must count both uses and reuses. It is not
796 possible to negotiate the reporting of one but not the other.
797 ---------
798 Mogul, Leach [Page 14]
799
800 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
801
802
803 3.5 When to send usage reports
804 A proxy that has offered to send usage reports to its parent in the
805 metering subtree MUST send a usage report in each of these
806 situations:
807
808 1. When it forwards a conditional GET on the resource
809 instance on behalf of one of its clients (if the GET is
810 conditional on at most one entity-tag).
811
812 2. When it forwards a conditional HEAD on the resource
813 instance on behalf of one of its clients.
814
815 3. When it must generate a conditional GET to satisfy a
816 client request because the max-uses limit has been
817 exceeded.
818
819 4. Upon expiration of a metering timeout associated with a
820 cache entry that has a non-zero hit-count.
821
822 5. When it removes the corresponding non-zero hit-count entry
823 from its storage for any reason including:
824
825 - the proxy needs the storage space for another
826 hit-count entry.
827
828 - the proxy is not able to store more than one response
829 per resource, and a request forwarded on behalf of a
830 client has resulted in the receipt of a new response
831 (one with a different entity-tag or last-modified
832 time).
833
834 Note that a cache might continue to store hit-count
835 information even after having deleted the body of the
836 response, so it is not necessary to report the hit-count
837 when deleting the body; it is only necessary to report it
838 if the proxy is about to "forget" a non-zero value.
839
840 (Section 5.3 explains how hit-counts become zero or non-zero.)
841
842 If the usage report is being sent because the proxy is about to
843 remove the hit-count entry from its storage, or because of an expired
844 metering timeout:
845
846 - The proxy MUST send the report as part of a conditional
847 HEAD request on the resource instance.
848
849 - The proxy is not required to retry the HEAD request if it
850 fails (this is a best-efforts design). To improve
851 accuracy, however, the proxy SHOULD retry failed HEAD
852 requests, subject to resource constraints.
853
854
855 Mogul, Leach [Page 15]
856
857 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
858
859
860 - The proxy is not required to serialize any other operation
861 on the completion of this request.
862
863 ---------
864 Note: proxy implementors are strongly encouraged to batch
865 several HEAD-based reports to the same server, when possible,
866 over a single persistent connection, to reduce network overhead
867 as much as possible. This may involve a non-naive algorithm
868 for scheduling the deletion of hit-count entries.
869 ---------
870
871 If the usage count is sent because of an arriving request that also
872 carries a "count" directive, the proxy MUST combine its own (possibly
873 zero) use and reuse counts with the arriving counts, and then attempt
874 to forward the request.
875
876 However, the proxy is not required to forward an arriving request
877 with a "count" directive, provided that:
878
879 - it can reply to the request using a cached response, in
880 compliance with other requirements of the HTTP
881 specification.
882
883 - such a response does not exceed a max-uses limit.
884
885 - it is not required to forward the request because of an
886 expired metering timeout.
887
888 If an arriving request carries a "count" directive, and the proxy no
889 longer has a cache entry for the resource, the proxy MUST forward the
890 "count" directive. (This is, in any case, what a proxy without a
891 suitable cache entry would normally do for any valid request it
892 receives.)
893
894 ---------
895 Discussion point: a previous version of this design made the
896 final HEAD-based report optional for the proxy, and included a
897 way for the proxy to notify the server that it intended to
898 provide this report.
899
900 In this design, a proxy that offers its willingness to
901 hit-meter a resource must make the final HEAD-based report, if
902 the unreported count is non-zero; there is no option.
903
904 Doing so commits a hit-metering proxy to send a fraction of one
905 extra request per "cache entry and removal" cycle. This is not
906 exactly one request, because it is possible that the stored
907 count is zero and does not need to be reported. (Trace-based
908 studies should be done to estimate the actual fraction.) We
909 believe that this cost is minimal except for proxies whose
910 network connection is severely bandwidth-limited, and since
911
912 Mogul, Leach [Page 16]
913
914 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
915
916
917 origin servers may not be willing to allow proxy caching except
918 when the final hit-count report is provided, even
919 bandwidth-limited proxies may come out ahead by offering to
920 hit-meter.
921
922 However, it is feasible to change this protocol design to allow
923 a proxy to offer to hit-meter without committing to send a
924 final HEAD-based report. This would involve the addition of
925 two more Meter directives, "wont-final-report" and
926 "dont-final-report". An origin server receiving a "Meter:
927 wont-final-report" may, at its option, either reply with
928 "Meter: dont-final-report" and allow the proxy to cache the
929 response, or with a "Cache-control: proxy-maxage=0" (if it
930 wants fully accurate hit counts). If the protocol is amended
931 to include this feature, proxy administrators would need to
932 choose between the small extra overhead of doing this final
933 HEAD, and the possibly much larger cost of not being permitted
934 to cache certain resources at all.
935
936 We do not believe that this option is likely to result in
937 improved performance, but we are willing to include it in the
938 specification if strong arguments are made in its favor.
939 ---------
940
941 3.6 Subdivision of usage-limits
942 When an origin server specifies a usage limit, a proxy in the
943 metering subtree may subdivide this limit among its children in the
944 subtree as it sees fit.
945
946 For example, consider the situation with two proxies P1 and P2, each
947 of which uses proxy P3 as a way to reach origin server S. Imagine
948 that S sends P3 a response with
949
950 Meter: max-uses=10
951
952 The proxies use that response to satisfy the current requesting
953 end-client. The max-uses directive in this example allows the
954 combination of P1, P2, and P3 together to satisfy 10 additional
955 end-client uses (unconditional GETs) for the resource.
956
957 This specification does not constrain how P3 divides up that
958 allocation among itself and the other proxies. For example, P3 could
959 retain all of max-use allocation for itself. In that case, it would
960 forward the response to P1 and/or P2 with
961
962 Meter: max-uses=0
963
964 P3 might also divide the allocation equally among P1 and P2,
965 retaining none for itself (which may be the right choice if P3 has
966 few or no other clients). In this case, it could send
967
968
969 Mogul, Leach [Page 17]
970
971 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
972
973
974 Meter: max-uses=5
975
976 to the proxy (P1 or P2) that made the initial request, and then
977 record in some internal data structure that it "owes" the other proxy
978 the rest of the allocation.
979
980 Note that this freedom to choose the max-uses value applies to the
981 origin server, as well. There is no requirement that an origin
982 server send the same max-uses value to all caches. For example, it
983 might make sense to send "max-uses=2" the first time one hears from a
984 cache, and then double the value (up to some maximum limit) each time
985 one gets a "use-count" from that cache. The idea is that the faster
986 a cache is using up its max-use quota, the more likely it will be to
987 report a use-count value before removing the cache entry. Also, high
988 and frequent use-counts imply a corresponding high efficiency benefit
989 from allowing caching.
990
991 Again, the details of such heuristics would be outside the scope of
992 this specification.
993
994
995 4 Analysis
996
997 This section includes informal analyses of several aspects of
998 hit-metering:
999
1000 1. the accuracy of results when applied to counting users
1001 (section 4.1).
1002
1003 2. the problem of counting users whose browsers do not
1004 include caches, such as Network Computers (section 4.2).
1005
1006 3. delays imposed on ``critical paths'' for HTTP operations
1007 (section 4.3).
1008
1009 4.1 Approximation accuracy for counting users
1010 For many (but not all) service operators, the single most important
1011 aspect of the request stream is the number of distinct users who have
1012 retrieved a particular entity within a given period (e.g., during a
1013 given day). The hit-metering mechanism is designed to provide an
1014 origin server with an approximation of the number of users that
1015 reference a given resource. The intent of the design is that the
1016 precision of this approximation is consistent with the goals of
1017 simplicity and optional implementation.
1018
1019 Almost all Web users use client software that maintains local caches,
1020 and the state of the art of local-caching technology is quite
1021 effective. (Section 4.2 discusses the case where end-client caches
1022 are small or non-existent.) Therefore, assuming an effective and
1023 persistent end-client cache, each individual user who retrieves an
1024 entity does exactly one GET request that results in a 200 or 203
1025
1026 Mogul, Leach [Page 18]
1027
1028 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1029
1030
1031 response, or a 206 response that includes the first byte of the
1032 entity. If a proxy cache maintains and reports an accurate use-count
1033 of such retrievals, then its reported use-count will closely
1034 approximate the number of distinct users who have retrieved the
1035 entity.
1036
1037 There are some circumstances under which this approximation can break
1038 down. For example, if an entity stays in a proxy cache for much
1039 longer than it persists in the typical client cache, and users often
1040 re-reference the entity, then this scheme will tend to over-count the
1041 number of users. Or, if the cache-management policy implemented in
1042 typical client caches is biased against retaining certain kinds of
1043 frequently re-referenced entities (such as very large images), the
1044 use-counts reported will tend to overestimate the user-counts for
1045 such entities.
1046
1047 Browser log analysis has shown that when a user revisits a resource,
1048 this is almost always done very soon after the previous visit, almost
1049 always with fewer than eight intervening references [10]. Although
1050 this result might not apply universally, it implies that almost all
1051 reuses will hit in the end-client cache, and will not be seen as
1052 unconditional GETs by a proxy cache.
1053
1054 The existing (HTTP/1.0) "cache-busting" mechanisms for counting
1055 distinct users will certainly overestimate the number of users behind
1056 a proxy, since it provides no reliable way to distinguish between a
1057 user's initial request and subsequent repeat requests caused by
1058 insufficient space in the end-client cache. The "Cache-control:
1059 proxy-maxage=0" feature of HTTP/1.1 does allow the separation of
1060 use-counts and reuse-counts, provided that no HTTP/1.0 proxy caches
1061 intervene.
1062
1063 Note that if there is doubt about the validity of the results of
1064 hit-metering a given set of resources, the server can employ
1065 cache-busting techniques for short periods, to establish a baseline
1066 for validating the hit-metering results. Various approaches to this
1067 problem are discussed in a paper by James Pitkow [8].
1068
1069 4.2 What about "Network Computers"?
1070 The analysis in section 4.1 assumed that "almost all Web users" have
1071 client caches. If the Network Computers (NC) model becomes popular,
1072 however, then this assumption may be faulty: most proposed NCs have
1073 no disk storage, and relatively little RAM. Many Personal Digital
1074 Assistants (PDAs), which sometimes have network access, have similar
1075 constraints. Such client systems may do little or no caching of HTTP
1076 responses. This means that a single user might well generate many
1077 unconditional GETs that yield the same response from a proxy cache.
1078
1079 First note that the hit-metering design in this document, even with
1080 such clients, provides an approximation no worse than available with
1081 unmodified HTTP/1.1: the counts that a proxy would return to an
1082
1083 Mogul, Leach [Page 19]
1084
1085 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1086
1087
1088 origin server would represent exactly the number of requests that the
1089 proxy would forward to the server, if the server simply specifies
1090 "Cache-control: proxy-maxage=0".
1091
1092 However, it may be possible to improve the accuracy of these
1093 hit-counts by use of some heuristics at the proxy. For example, the
1094 proxy might note the IP address of the client, and count only one GET
1095 per client address per response. This is not perfect: for example,
1096 it fails to distinguish between NCs and certain other kinds of hosts.
1097 The proxy might also use the heuristic that only those clients that
1098 never send a conditional GET should be treated this way, although we
1099 are not at all certain that NCs will never send conditional GETs.
1100
1101 Since the solution to this problem appears to require heuristics
1102 based on the actual behavior of NCs (or perhaps a new HTTP protocol
1103 feature that allows unambiguous detection of cacheless clients), it
1104 appears to be premature to specify a solution.
1105
1106 4.3 Critical-path delay analysis
1107 In systems (such as the Web) where latency is at issue, there is
1108 usually a tree of steps which depend on one another, in such a way
1109 that the final result cannot be accomplished until all of its
1110 predecessors have been. Since the tree structure admits some
1111 parallelism, it is not necessary to add up the timings for each step
1112 to discover the latency for the entire process. But any single path
1113 through this dependency tree cannot be parallelized, and the longest
1114 such path is the one whose length (in units of seconds) determines
1115 the overall latency. This is the ``critical path,'' because no
1116 matter how much shorter one makes any other path, that cannot change
1117 the overall latency for the final result.
1118
1119 If one views the final result, for a Web request, as rendering a page
1120 at a browser, or otherwise acting on the result of a request, clearly
1121 some network round trips (e.g., exchanging TCP SYN packets if the
1122 connection doesn't already exist) are on the critical path. This
1123 hit-metering design does add some round-trips for reporting non-zero
1124 counts when a cache entry is removed, but, by design, these are off
1125 any critical path: they may be done in parallel with any other
1126 operation, and require only ``best efforts,'' so a proxy does not
1127 have to serialize other operations with their success or failure.
1128
1129 Clearly, anything that changes network utilization (either increasing
1130 or decreasing it) can indirectly affect user-perceived latency. Our
1131 expectation is that hit-metering, on average, will reduce loading and
1132 so even its indirect effects should not add network round-trips in
1133 any critical path. But there might be a few specific instances where
1134 the added non-critical-path operations (specifically, usage reports
1135 upon cache-entry removal) delay an operation on a critical path.
1136 This is an unavoidable problem in datagram networks.
1137
1138
1139
1140 Mogul, Leach [Page 20]
1141
1142 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1143
1144
1145 5 Specification
1146
1147 5.1 Specification of Meter header and directives
1148 The Meter general-header field is used to:
1149
1150 - Negotiate the use of hit-metering and usage-limiting among
1151 origin servers and proxy caches.
1152
1153 - Report use counts and reuse counts.
1154
1155 Implementation of the Meter header is optional for both proxies and
1156 origin servers. However, any proxy that transmits the Meter header
1157 in a request MUST implement every requirement of this specification,
1158 without exception or amendment.
1159
1160 The Meter header MUST always be protected by a Connection header. A
1161 proxy that does not implement the Meter header MUST NOT pass it
1162 through to another system (see section 5.5 for how a non-caching
1163 proxy may comply with this specification). If a Meter header is
1164 received in a message whose version is less than HTTP/1.1, it MUST be
1165 ignored (because it has clearly flowed through a proxy that does not
1166 implement Meter).
1167
1168 A proxy that has received a response with a version less than
1169 HTTP/1.1, and therefore from a server (or another proxy) that does
1170 not implement the Meter header, SHOULD NOT send Meter request
1171 directives to that server, because these would simply waste
1172 bandwidth. This recommendation does not apply if the proxy is
1173 currently hit-metering or usage-limiting any responses from that
1174 server. If the proxy receives a HTTP/1.1 or higher response from
1175 such a server, it should cease its suppression of the Meter
1176 directives.
1177
1178 All proxies sending the Meter header MUST adhere to the "metering
1179 subtree" design described in section 3.
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197 Mogul, Leach [Page 21]
1198
1199 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1200
1201
1202 Meter = "Meter" ":" 0#meter-directive
1203
1204 meter-directive = meter-request-directive
1205 | meter-response-directive
1206 | meter-report-directive
1207
1208 meter-request-directive =
1209 "will-report-and-limit"
1210 | "wont-report"
1211 | "wont-limit"
1212
1213 meter-report-directive =
1214 | "count" "=" 1*DIGIT "/" 1*DIGIT
1215
1216 meter-response-directive =
1217 "max-uses" "=" 1*DIGIT
1218 | "max-reuses" "=" 1*DIGIT
1219 | "do-report"
1220 | "dont-report"
1221 | "timeout" "=" 1*DIGIT
1222 | "wont-ask"
1223
1224
1225 A meter-request-directive or meter-report-directive may only appear
1226 in an HTTP request message. A meter-response-directive may only
1227 appear in an HTTP response directive.
1228
1229 An empty Meter header in a request means "Meter:
1230 will-report-and-limit". An empty Meter header in a response, or any
1231 other response including one or more Meter headers without the
1232 "dont-report" or "wont-ask" directive, implies "Meter: do-report".
1233
1234 The meaning of the meter-request-directives are as follows:
1235
1236 will-report-and-limit
1237 indicates that the proxy is willing and able to
1238 return usage reports and will obey any usage-limits.
1239
1240 wont-report indicates that the proxy will obey usage-limits but
1241 will not send usage reports.
1242
1243 wont-limit indicates that the proxy will not obey usage-limits
1244 but will send usage reports.
1245
1246 A proxy willing neither to obey usage-limits nor to send usage
1247 reports MUST NOT transmit a Meter header in the request.
1248
1249 The meaning of the meter-report-directives are as follows:
1250
1251 count "=" 1*DIGIT "/" 1*DIGIT
1252 Both digit strings encode decimal integers. The
1253
1254 Mogul, Leach [Page 22]
1255
1256 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1257
1258
1259 first integer indicates the count of uses of the
1260 cache entry since the last report; the second integer
1261 indicates the count of reuses of the entry.
1262
1263 Section 5.3 specifies the counting rules.
1264
1265 The meaning of the meter-response-directives are as follows:
1266
1267 max-uses "=" 1*DIGIT
1268 sets an upper limit on the number of "uses" of the
1269 response, not counting its immediate forwarding to
1270 the requesting end-client, for all proxies in the
1271 following subtree taken together.
1272
1273 max-reuses "=" 1*DIGIT
1274 sets an upper limit on the number of "reuses" of the
1275 response for all proxies in the following subtree
1276 taken together.
1277
1278 do-report specifies that the proxy MUST send usage reports to
1279 the server.
1280
1281 dont-report specifies that the proxy SHOULD NOT send usage
1282 reports to the server.
1283
1284 timeout "=" 1*DIGIT
1285 sets a metering timeout of the specified number of
1286 minutes (not seconds) after the origination of this
1287 response (as indicated by its "Date" header). If the
1288 proxy has a non-zero hit count for this response when
1289 the timeout expires, it MUST send a report to the
1290 server at or before that time. Timeouts should be
1291 implemented with an accuracy of plus or minus one
1292 minute. Implies "do-report".
1293
1294 wont-ask specifies that the proxy SHOULD NOT send any Meter
1295 headers to the server. The proxy should forget this
1296 advice after a period of no more than 24 hours.
1297
1298 Section 5.3 specifies the counting rules, and in particular specifies
1299 a somewhat non-obvious interpretation of the max-uses value.
1300
1301 5.2 Abbreviations for Meter directives
1302 To allow for the most efficient possible encoding of Meter headers,
1303 we define abbreviated forms of all Meter directives. These are
1304 exactly semantically equivalent to their non-abbreviated
1305 counterparts. All systems implementing the Meter header MUST
1306 implement both the abbreviated and non-abbreviated forms.
1307 Implementations SHOULD use the abbreviated forms in normal use.
1308
1309
1310
1311 Mogul, Leach [Page 23]
1312
1313 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1314
1315
1316 The abbreviated forms of Meter directive are shown below, with the
1317 corresponding non-abbreviated literals in the comments:
1318
1319 Abb-Meter = "Meter" ":" 0#abb-meter-directive
1320
1321 abb-meter-directive = abb-meter-request-directive
1322 | abb-meter-response-directive
1323 | abb-meter-report-directive
1324
1325 abb-meter-request-directive =
1326 "w" ; "will-report-and-limit"
1327 | "x" ; "wont-report"
1328 | "y" ; "wont-limit"
1329
1330 abb-meter-report-directive =
1331 | "c" "=" 1*DIGIT "/" 1*DIGIT ; "count"
1332
1333 abb-meter-response-directive =
1334 "u" "=" 1*DIGIT ; "max-uses"
1335 | "r" "=" 1*DIGIT ; "max-reuses"
1336 | "d" ; "do-report"
1337 | "e" ; "dont-report"
1338 | "t" "=" 1*DIGIT ; "timeout"
1339 | "n" ; "wont-ask"
1340
1341
1342 ---------
1343 Note: although the Abb-Meter BNF rule is defined separately
1344 from the Meter rule, one may freely mix abbreviated and
1345 non-abbreviated Meter directives in the same header.
1346 ---------
1347
1348 5.3 Counting rules
1349
1350 ---------
1351 Note: please remember that hit-counts and usage-counts are
1352 associated with individual responses, not with resources. A
1353 cache entry that, over its lifetime, holds more than one
1354 response is also not a "response", in this particular sense.
1355 ---------
1356
1357 Let R be a cached response, and V be the value of the Request-URI and
1358 selecting request-headers (if any, see section 14.43 of the HTTP/1.1
1359 specification [3]) that would select R if contained in a request. We
1360 define a "use" of R as occurring when the proxy returns its stored
1361 copy of R in a response with any of the following status codes: a 200
1362 (OK) status; a 203 (Non-Authoritative Information) status; or a 206
1363 (Partial Content) status when the response contains byte #0 of the
1364 entity (see section 5.4 for a discussion of Range requests).
1365
1366
1367
1368 Mogul, Leach [Page 24]
1369
1370 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1371
1372
1373 ---------
1374 Note: when a proxy forwards a client's request and receives a
1375 response, the response that the proxy sends immediately to the
1376 requesting client is not counted as a "use". I.e., the
1377 reported count is the number of times the cache entry was used,
1378 and not the number of times that the response was used.
1379 ---------
1380
1381 We define a "reuse" of R as as occurring when the proxy responds to a
1382 request selecting R with a 304 (Not Modified) status, unless that
1383 request is a Range request that does not specify byte #0 of the
1384 entity.
1385
1386 5.3.1 Counting rules for hit-metering
1387 A proxy participating in hit-metering for a cache response R
1388 maintains two counters, CU and CR, associated with R. When a proxy
1389 first stores R in its cache, it sets both CU and CR to 0 (zero).
1390 When a subsequent client request results in a "use" of R, the proxy
1391 increments CU. When a subsequent client request results in a "reuse"
1392 of R, the proxy increments CR. When a subsequent client request
1393 selecting R (i.e., including V) includes a "count" Meter directive,
1394 the proxy increments CU and CR using the corresponding values in the
1395 directive.
1396
1397 When the proxy sends a request selecting R (i.e., including V) to the
1398 inbound server, it includes a "count" Meter directive with the
1399 current CU and CR as the parameter values. If this request was
1400 caused by the proxy's receipt of a request from a client, upon
1401 receipt of the server's response, the proxy sets CU and CR to the
1402 number of uses and reuses, respectively, that may have occurred while
1403 the request was in progress. (These numbers are likely, but not
1404 certain, to be zero.) If the proxy's request was a final HEAD-based
1405 report, it need no longer maintain the CU and CR values, but it may
1406 also set them to the number of intervening uses and reuses and retain
1407 them.
1408
1409 5.3.2 Counting rules for usage-limiting
1410 A proxy participating in usage-limiting for a response R maintains
1411 either or both of two counters TU and TR, as appropriate, for that
1412 resource. TU and TR are incremented in just the same way as CU and
1413 CR, respectively. However, TU is zeroed only upon receipt of a
1414 "max-uses" Meter directive for that response (including the initial
1415 receipt). Similarly, TR is zeroed only upon receipt of a
1416 "max-reuses" Meter directive for that response.
1417
1418 A proxy participating in usage-limiting for a response R also stores
1419 values MU and/or MR associated with R. When it receives a response
1420 including only a max-uses value, it sets MU to that value and MR to
1421 infinity. When it receives a response including only a max-reuses
1422 value, it sets MR to that value and MU to infinity. When it receives
1423 a response including both max-reuses and max-reuses values, it sets
1424
1425 Mogul, Leach [Page 25]
1426
1427 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1428
1429
1430 MU and MR to those values, respectively. When it receives a
1431 subsequent response including neither max-reuses nor max-reuses
1432 values, it sets both MU and MR to infinity.
1433
1434 If a proxy participating in usage-limiting for a response R receives
1435 a request that would cause a "use" of R, and TU >= MU, it MUST
1436 forward the request to the server. If it receives a request that
1437 would cause a "reuse" of R, and TR >= MR, it MUST forward the request
1438 to the server. If (in either case) the proxy has already forwarded a
1439 previous request to the server and is waiting for the response, it
1440 should delay further handling of the new request until the response
1441 arrives (or times out); it SHOULD NOT have two revalidation requests
1442 pending at once that select the same response, unless these are Range
1443 requests selecting different subranges.
1444
1445 There is a special case of this rule for the "max-uses" directive: if
1446 the proxy receives a response with "max-uses=0" and does not forward
1447 it to a requesting client, the proxy should set a flag PF associated
1448 with R. If R is true, then when a request arrives while if TU >= MU,
1449 if the PF flag is set, then the request need not be forwarded to the
1450 server (provided that this is not required by other caching rules).
1451 However, the PF flag MUST be cleared on any use of the response.
1452
1453 ---------
1454 Note: the "PF" flag is so named because this feature is useful
1455 only for caches that could issue a "prefetch" request before an
1456 actual client request for the response. A proxy not
1457 implementing prefetching need not implement the PF flag.
1458 ---------
1459
1460 5.3.3 Equivalent algorithms are allowed
1461 Any other algorithm that exhibits the same external behavior (i.e.,
1462 generates exactly the same requests from the proxy to the server) as
1463 the one in this section is explicitly allowed.
1464
1465 ---------
1466 Note: in most cases, TU will be equal to CU, and TR will be
1467 equal to CR. The only two cases where they could differ are:
1468
1469 1. The proxy issues a non-conditional request for the
1470 resource using V, while TU and/or TR are non-zero, and
1471 the server's response includes a new "max-uses" and/or
1472 "max-reuses" directive (thus zeroing TU and/or TR, but
1473 not CU and CR).
1474
1475 2. The proxy issues a conditional request reporting the
1476 hit-counts (and thus zeroing CU and CR, but not TU or
1477 TR), but the server's response does not include a new
1478 "max-uses" and/or "max-reuses" directive.
1479
1480 To solve the first case, the proxy has several implementation
1481 options
1482 Mogul, Leach [Page 26]
1483
1484 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1485
1486
1487 - Always store TU and TR separately from CU and CR.
1488
1489 - Create "shadow" copies of TU and TR when this situation
1490 arises (analogous to "copy on write").
1491
1492 - Generate a HEAD-based usage report when the
1493 non-conditional request is sent (or when the
1494 "max-uses=0" is received), causing CU and CR to be
1495 zeroed (analogous in some ways to a "memory barrier"
1496 instruction).
1497
1498 In the second case, the server implicitly has removed the
1499 usage-limit(s) on the response (by setting MU and/or MR to
1500 infinity), and so the fact that, say, TU is different from CU
1501 is not significant.
1502 ---------
1503
1504 ---------
1505 Note: It may also be possible to eliminate the PF flag by
1506 sending extra HEAD-based usage-report requests, but we
1507 recommend against this; it is better to allocate an extra bit
1508 per entry than to transmit extra requests.
1509 ---------
1510
1511 5.4 Counting rules: interaction with Range requests
1512 HTTP/1.1 allows a client to request sub-ranges of a resource. A
1513 client might end up issuing several requests with the net effect of
1514 receiving one copy of the resource. For uniformity of the results
1515 seen by origin servers, proxies need to observe a rule for counting
1516 these references, although it is not clear that one rule generates
1517 accurate results in every case.
1518
1519 The rule established in this specification is that proxies count as a
1520 "use" or "reuse" only those Range requests that result in the return
1521 of byte #0 of the resource. The rationale for this rule is that in
1522 almost every case, an end-client will retrieve the beginning of any
1523 resource that it references at all, and that it will seldom retrieve
1524 any portion more than once. Therefore, this rule appears to meet the
1525 goal of a "best-efforts" approximation.
1526
1527 5.5 Implementation by non-caching proxies
1528 A non-caching proxy may participate in the metering subtree; this is
1529 strongly recommended.
1530
1531 A non-caching proxy (HTTP/1.1 or higher) that participates in the
1532 metering subtree SHOULD forward Meter headers on both requests and
1533 responses, with the appropriate Connection headers.
1534
1535 If a non-caching proxy forwards Meter headers, it MUST comply with
1536 these restrictions:
1537
1538
1539 Mogul, Leach [Page 27]
1540
1541 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1542
1543
1544 1. If the proxy forwards Meter headers in responses, such a
1545 response MUST NOT be returned to any request except the
1546 one that elicited it.
1547
1548 2. Once a non-caching proxy starts forwarding Meter headers,
1549 it should not arbitrarily stop forwarding them (or else
1550 reports may be lost).
1551
1552 A proxy that caches some responses and not others, for whatever
1553 reason, may choose to implement the Meter header as a caching proxy
1554 for the responses that it caches, and as a non-caching proxy for the
1555 responses that it does not cache, as long as its external behavior
1556 with respect to any particularly response is fully consistent with
1557 this specification.
1558
1559 5.6 Implementation by cooperating caches
1560 Several HTTP cache implementations, most notably the Harvest/Squid
1561 cache [1], create cooperative arrangements between several caches.
1562 If such caches use a protocol other than HTTP to communicate between
1563 themselves, such as the Internet Cache Protocol (ICP) [11], and if
1564 they implement the Meter header, then they MUST act to ensure that
1565 their cooperation does not violate the intention of this
1566 specification.
1567
1568 In particular, if one member of a group of cooperating caches agrees
1569 with a server to hit-meter a particular response, and then passes
1570 this response via a non-HTTP protocol to a second cache in the group,
1571 the caches MUST ensure that the server which requested the metering
1572 receives reports that appropriately account for any uses or resues
1573 made by the second cache. Similarly, if the first cache agreed to
1574 usage-limit the response, the total number of uses by the group of
1575 caches MUST be limited to the agreed-upon number.
1576
1577
1578 6 Expressing or approximating the "proxy-mustcheck" directive
1579
1580 ---------
1581 Note: this section has been deleted; please see the discussion
1582 in the proposal for ``proxy-maxage'' made in [6].
1583 ---------
1584
1585
1586 7 Examples
1587
1588 7.1 Example of a complete set of exchanges
1589 This example shows how the protocol is intended to be used most of
1590 the time: for hit-metering without usage-limiting. Entity bodies are
1591 omitted.
1592
1593 A client sends request to a proxy:
1594
1595
1596 Mogul, Leach [Page 28]
1597
1598 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1599
1600
1601 GET http://foo.com/bar.html HTTP/1.1
1602
1603 The proxy forwards request to the origin server:
1604
1605 GET /bar.html HTTP/1.1
1606 Host: foo.com
1607 Connection: Meter
1608
1609 thus offering (implicitly) "will-report-and-limit".
1610
1611 The server responds to the proxy:
1612
1613 HTTP/1.1 200 OK
1614 Date: Fri, 06 Dec 1996 18:44:29 GMT
1615 Cache-control: max-age=3600
1616 Connection: meter
1617 Etag: "abcde"
1618
1619 thus (implicitly) requiring "do-report" (but not requiring
1620 usage-limiting).
1621
1622 The proxy responds to the client:
1623
1624 HTTP/1.1 200 OK
1625 Date: Fri, 06 Dec 1996 18:44:29 GMT
1626 Etag: "abcde"
1627 Cache-control: max-age=3600, proxy-mustcheck
1628 Age: 1
1629
1630 Since the proxy does not know if its client is an end-system, or a
1631 proxy that doesn't do metering, it adds the "proxy-mustcheck"
1632 directive.
1633
1634 Another client soon asks for the resource:
1635
1636 GET http://foo.com/bar.html HTTP/1.1
1637
1638 and the proxy sends the same response as it sent to the other client,
1639 except (perhaps) for the Age value.
1640
1641 After an hour has passed, a third client asks for the response:
1642
1643 GET http://foo.com/bar.html HTTP/1.1
1644
1645 But now the response's max-age has been exceeded, so the proxy
1646 revalidates the response with the origin server:
1647
1648
1649
1650
1651
1652
1653 Mogul, Leach [Page 29]
1654
1655 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1656
1657
1658 GET /bar.html HTTP/1.1
1659 If-None-Match: "abcde"
1660 Host: foo.com
1661 Connection: Meter
1662 Meter: count=1/0
1663
1664 thus simultaneously fulfilling its duties to validate the response
1665 and to report the one "use" that wasn't forwarded.
1666
1667 The origin server responds:
1668
1669 HTTP/1.1 304 Not Modified
1670 Date: Fri, 06 Dec 1996 19:44:29 GMT
1671 Cache-control: max-age=3600
1672 Etag: "abcde"
1673
1674 so the proxy can use the original response to reply to the new
1675 client; the proxy also zeros the use-count it associates with that
1676 response.
1677
1678 Another client soon asks for the resource:
1679
1680 GET http://foo.com/bar.html HTTP/1.1
1681
1682 and the proxy sends the appropriate response.
1683
1684 After another few hours, the proxy decides to remove the cache entry.
1685 When it does so, it sends to the origin server:
1686
1687 HEAD /bar.html HTTP/1.1
1688 If-None-Match: "abcde"
1689 Host: foo.com
1690 Connection: Meter
1691 Meter: count=1/0
1692
1693 reporting that one more use of the response was satisfied from the
1694 cache.
1695
1696 7.2 Protecting against HTTP/1.0 proxies
1697 An origin server that does not want HTTP/1.0 caches to store the
1698 response at all, and is willing to have HTTP/1.0 end-system clients
1699 generate excess GETs (which will be forwarded by HTTP/1.0 proxies)
1700 could send this for its reply:
1701
1702 HTTP/1.1 200 OK
1703 Cache-control: max-age=3600
1704 Connection: meter
1705 Etag: "abcde"
1706 Expires: Sun, 06 Nov 1994 08:49:37 GMT
1707
1708 HTTP/1.0 caches will see the ancient Expires header, but HTTP/1.1
1709 caches will see the max-age directive and will ignore Expires.
1710 Mogul, Leach [Page 30]
1711
1712 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1713
1714
1715 ---------
1716 Note: although most major HTTP/1.0 proxy implementations
1717 observe the Expires header, it is possible that some are in use
1718 that do not. Use of the Expires header to prevent caching by
1719 HTTP/1.0 proxies might not be entirely reliable.
1720 ---------
1721
1722 7.3 More elaborate examples
1723 Here is a request from a proxy that is willing to hit-meter but is
1724 not willing to usage-limit:
1725
1726 GET /bar.html HTTP/1.1
1727 Host: foo.com
1728 Connection: Meter
1729 Meter: wont-limit
1730
1731 Here is a response from an origin server that does not want hit
1732 counting, but does want "uses" limited to 3, and "reuses" limited to
1733 6:
1734
1735 HTTP/1.1 200 OK
1736 Cache-control: max-age=3600
1737 Connection: meter
1738 Etag: "abcde"
1739 Expires: Sun, 06 Nov 1994 08:49:37 GMT
1740 Meter: max-uses=3, max-reuses=6, dont-report
1741
1742 Here is the same example with abbreviated Meter directive names:
1743
1744 HTTP/1.1 200 OK
1745 Cache-control: max-age=3600
1746 Connection: meter
1747 Etag: "abcde"
1748 Expires: Sun, 06 Nov 1994 08:49:37 GMT
1749 Meter:u=3,r=6,e
1750
1751
1752 8 Interactions with content negotiation
1753
1754 This section describes two aspects of the interaction between
1755 hit-metering and``content-negotiated'' resources:
1756
1757 1. treatment of responses carrying a Vary header (section
1758 8.1).
1759
1760 2. treatment of responses that use the proposed Transparent
1761 Content Negotiation mechanism (section 8.2).
1762
1763
1764
1765
1766
1767 Mogul, Leach [Page 31]
1768
1769 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1770
1771
1772 8.1 Treatment of responses carrying a Vary header
1773 Separate counts should be kept for each combination of the headers
1774 named in the Vary header for the Request-URI (what [3] calls "the
1775 selecting request-headers"), even if they map to the same entity-tag.
1776 This rule has the effect of counting hits on each variant, if there
1777 are multiple variants of a page available.
1778
1779 ---------
1780 Note: This interaction between Vary and the hit-counting
1781 directives allows the origin server a lot of flexibility in
1782 specifying how hits should be counted. In essence, the origin
1783 server uses the Vary mechanism to divide the requests for a
1784 resource into arbitrary categories, based on the request-
1785 headers. (We will call these categories "request-patterns".)
1786 Since a proxy keeps its hit-counts for each request-pattern,
1787 rather than for each resource, the origin server can obtain
1788 separate statistics for many aspects of an HTTP request.
1789 ---------
1790
1791 For example, if a page varied based on the value of the User-Agent
1792 header in the requests, then hit counts would be kept for each
1793 different flavor of browser. But it is in fact more general than
1794 that; because multiple header combinations can map to the same
1795 variant, it also enables the origin server to count the number of
1796 times (e.g.) the Swahili version of a page was requested, even though
1797 it is only available in English.
1798
1799 If a proxy does not support the Vary mechanism, then [3] says that it
1800 MUST NOT cache any response that carries a Vary header, and hence
1801 need not implement any aspect of this hit-counting or usage-limiting
1802 design for varying resources.
1803
1804 ---------
1805 Note: this also implies that if a proxy supports the Vary
1806 mechanism but is not willing to maintain independent hit-counts
1807 for each variant response in its cache, then it must follow at
1808 least one of these rules:
1809
1810 1. It must not use the Meter header in a request to offer
1811 to hit-meter or usage-limit responses.
1812
1813 2. If it does offer to hit-meter or usage-limit responses,
1814 and then receives a response that includes both a Vary
1815 header and a Meter header with a directive that it
1816 cannot satisfy, then the proxy must not cache the
1817 response.
1818
1819 In other words, a proxy is allowed to partially implement the
1820 Vary mechanism with respect to hit-metering, as long as this
1821 has no externally visible effect on its ability to comply with
1822 the Meter specification.
1823 ---------
1824 Mogul, Leach [Page 32]
1825
1826 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1827
1828
1829 This approach works for counting almost any aspect of the request
1830 stream, without embedding any specific list of countable aspects in
1831 the specification or proxy implementation.
1832
1833 8.2 Interaction with Transparent Content Negotiation
1834 [A description of the interaction between this design and the
1835 proposed Transparent Content Negotiation (TCN) design [5] will be
1836 made available in a later document.]
1837
1838
1839 9 A Note on Capturing Referrals
1840
1841 It is alleged that some advertisers want to pay content providers,
1842 not by the "hit", but by the "nibble" -- the number of people who
1843 actually click on the ad to get more information.
1844
1845 Now, HTTP already has a mechanism for doing this: the "Referer"
1846 header. However, perhaps it ought to be disabled for privacy reasons
1847 -- according the HTTP/1.1 spec:
1848
1849 "Because the source of the link may be private information
1850 or may reveal an otherwise private information source, it is
1851 strongly recommended that the user be able to select whether
1852 or not the Referer field is sent."
1853
1854 However, in the case of ads, the source of the link actually wants to
1855 let the referred-to page know where the reference came from.
1856
1857 This does not require the addition of any extra mechanism, but rather
1858 can use schemes that embed the referrer in the URI in a manner
1859 similar to this:
1860
1861 http://www.blah.com/ad-reference?from=site1
1862
1863 Such a URI should point to a resource (perhaps a CGI script) which
1864 returns a 302 redirect to the real page
1865
1866 http://www.blah.com/ad-reference.html
1867
1868 Proxies which do not cache 302s will cause one hit on the redirection
1869 page per use, but the real page will get cached. Proxies which do
1870 cache 302s and report hits on the cached 302s will behave optimally.
1871
1872 This approach has the advantage that it works whether or not the
1873 end-client has disabled the use of Referer. Combined with the rest
1874 of the hit-metering proposal in this design, this approach allows,
1875 for example, an advertiser to know how often a reference to an
1876 advertisement was made from a particular page.
1877
1878
1879
1880
1881 Mogul, Leach [Page 33]
1882
1883 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1884
1885
1886 10 Alternative proposals
1887
1888 There might be a number of other ways of gathering demographic and
1889 usage information; other mechanisms might respond to a different set
1890 of needs than this proposal does. This proposal certainly does not
1891 preclude the proposal or deployment of other such mechanisms, and
1892 many of them may be complementary to and compatible with the
1893 mechanism proposed here.
1894
1895 There has been some speculation that statistical sampling methods
1896 might be used to gather reasonably accurate data. One such proposal
1897 is to manipulate cache expiration times so that selected resources
1898 are uncachable for carefully chosen periods, allowing servers to
1899 accurately count accesses during those periods. The hit-metering
1900 mechanism proposed here is entirely complementary to that approach,
1901 since it could be used to reduce the cost of gathering those counts.
1902 James Pitkow has written a paper comparing an earlier draft of this
1903 hit-metering proposal with sampling approaches [8].
1904
1905 Phillip Hallam-Baker has proposed using a log-exchange protocol [4],
1906 by which a server could request a proxy's logs by making an HTTP
1907 request to the proxy. This proposal asserts that it is ``believed to
1908 operate correctly in configurations involving multiple proxies,'' but
1909 it is not clear that this is true if an outer proxy is used as a
1910 (one-way) firewall. The proposal also leaves a number of open
1911 issues, such as how an origin server can be sure that all of the
1912 proxies in the request subtree actually support log-exchange. It is
1913 also not clear how this proposal couples a proxy's support of
1914 log-exchange to a server's permission to cache a response.
1915
1916 For general background on the topic of Web measurement standards, see
1917 the discussion by Thomas P. Novak and Donna L. Hoffman [7]. Also see
1918 the ``Privacy and Demographics Overview'' page maintained by by the
1919 World Wide Web Consortium [9], which includes a pointer to some
1920 tentative proposals for gathering consumer demographics (not just
1921 counting references) [2].
1922
1923
1924 11 Security Considerations
1925
1926 Which outbound clients should a server (proxy or origin) trust to
1927 report hit counts? A malicious proxy could easily report a large
1928 number of hits on some page, and thus perhaps cause a large payment
1929 to a content provider from an advertiser. To help avoid this
1930 possibility, a proxy may choose to only relay usage counts received
1931 from its outbound proxies to its inbound servers when the proxies
1932 have authenticated themselves using Proxy-Authorization and/or they
1933 are on a list of approved proxies.
1934
1935 It is not possible to enforce usage limits if a proxy is willing to
1936 cheat (i.e., it offers to limit usage but then ignores a server's
1937 Meter directive).
1938 Mogul, Leach [Page 34]
1939
1940 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1941
1942
1943 Regarding privacy: it appears that the design in this document does
1944 not reveal any more information about individual users than would
1945 already be revealed by implementation of the existing HTTP/1.1
1946 support for "Cache-control: max-age=0, proxy-revalidate" or
1947 "Cache-control: proxy-maxage=0". It may, in fact, help to conceal
1948 certain aspects of the organizational structure on the outbound side
1949 of a proxy. In any case, the conflict between user requirements for
1950 anonymity and origin server requirements for demographic information
1951 cannot be resolved by purely technical means.
1952
1953
1954 12 Revision history
1955
1956 Minor clarifications, and grammar and spelling corrections, are not
1957 listed here.
1958
1959 12.1 draft-ietf-http-hit-metering-01.txt
1960 Added a timeout mechanism, to constrain the time-inaccuracy of
1961 hit-metering (sections 3.3, 3.5, 5.1, and 5.2).
1962
1963 Removed the rule that meter request directives apply to all
1964 subsequent requests on a transport connection. These directives now
1965 apply only to one request. Added an explicit requirement that a
1966 server must not ask a proxy to do something it did not volunteer to
1967 do (section 3.3).
1968
1969 Added a section discussing the critical-path latency issue (section
1970 4.3).
1971
1972 Added a section on interaction with Transparent Content Negotiation
1973 (section 8.2).
1974
1975 Added a section discussing alternative proposals (section 10).
1976
1977 Added a section on cooperating caches (section 5.6).
1978
1979 Replaced the discussion of ``proxy-mustcheck'' with a reference to
1980 the proposal for ``proxy-maxage'' (section 6).
1981
1982 Deleted section 4.4, ``Why max-uses is not a Cache-control
1983 directive.''
1984
1985 12.2 draft-ietf-http-hit-metering-00.txt
1986 Clarified goals, non-goals, and limitations (section 1.1).
1987
1988 Removed the term ``sticky'' from the specification of
1989 meter-request-directive; added an implementation note (section 3.3).
1990
1991 Clarifications and corrections concerning the use of the Connection
1992 header (section 3.1).
1993
1994
1995 Mogul, Leach [Page 35]
1996
1997 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
1998
1999
2000 Added support for non-caching proxies (section 5.5).
2001
2002 Modified discussion of the Referer header (section 9).
2003
2004 Added the "wont-ask" directive (sections 3.3 and 5.1).
2005
2006 Replaced the use of "proxy-revalidate" with the (placeholder)
2007 directive-name "proxy-mustcheck", and added a discussion of the
2008 alternatives for making this real (section 6).
2009
2010 12.3 draft-mogul-http-hit-metering-00.txt
2011 Initial revision.
2012
2013
2014 13 Acknowledgements
2015
2016 We gratefully acknowledge the constructive comments received from
2017 Anselm Baird-Smith, Ted Hardie, Koen Holtman (who suggested the
2018 technique described in section 9), Dave Kristol, Ari Luotonen,
2019 Patrick R. McManus, Ingrid Melve, and James Pitkow.
2020
2021
2022 14 References
2023
2024 1. Anwat Chankhunthod, Peter B. Danzig, Chuck Neerdaels, Michael
2025 F. Schwartz, and Kurt J. Worrell. A Hierarchical Internet Object
2026 Cache. Proc. 1996 USENIX Technical Conf., San Diego, January, 1996,
2027 pp. 153-163.
2028
2029 2. Daniel W. Connolly. Proposals for Gathering Consumer
2030 Demographics. http://www.w3.org/pub/WWW/Demographics/Proposals.html.
2031
2032 3. Roy T. Fielding, Jim Gettys, Jeffrey C. Mogul, Henrik Frystyk
2033 Nielsen, and Tim Berners-Lee. Hypertext Transfer Protocol --
2034 HTTP/1.1. RFC 2068, HTTP Working Group, January, 1997.
2035
2036 4. Phillip M. Hallam-Baker. Notification for Proxy Caches. W3C
2037 Working Draft WD-proxy-960221, World Wide Web Consortium, February,
2038 1996. http://www.w3.org/pub/WWW/TR/WD-proxy.html.
2039
2040 5. Koen Holtman and Andrew Mutz. Transparent Content Negotiation in
2041 HTTP. Internet-Draft draft-ietf-http-negotiation-01.txt, HTTP
2042 Working Group, March, 1997. This is a work in progress.
2043
2044 6. J. Mogul. Forcing HTTP/1.1 proxies to revalidate responses.
2045 Internet Draft draft-mogul-http-revalidate-00.txt, HTTP Working
2046 Group, January, 1997. This is a work in progress.
2047
2048 7. Thomas P. Novak and Donna L. Hoffman. New Metrics for New Media:
2049 Toward the Development of Web Measurement Standards. This is a draft
2050 paper, currently available at
2051
2052 Mogul, Leach [Page 36]
2053
2054 Internet-Draft Hit-Metering for HTTP 19 March 1997 18:31
2055
2056
2057 http://www2000.ogsm.vanderbilt.edu/novak/web.standards/webstand.html.
2058 Cited by permission of the author; do not quote or cite without
2059 permission.
2060
2061 8. James Pitkow. In search of reliable usage data on the WWW.
2062 Proc. Sixth International World Wide Web Conference, Santa Clara, CA,
2063 April, 1997, pp. ??-??. (To appear).
2064
2065 9. Joseph Reagle, Rohit Khare, Dan Connolly, and Tim Berners-Lee.
2066 Privacy and Demographics Overview.
2067 http://www.w3.org/pub/WWW/Demographics/.
2068
2069 10. Linda Tauscher and Saul Greenberg. Revisitation Patterns in
2070 World Wide Web Navigation. Research Report 96/587/07, Department of
2071 Computer Science, University of Calgary, March, 1996.
2072 http://www.cpsc.ucalgary.ca/projects/grouplab/
2073 papers/96WebReuse/TechReport96.html.
2074
2075 11. Duane Wessels and K Claffy. Internet Cache Protocol (ICP),
2076 version 2. Internet Draft draft-wessels-icp-v2-00.txt, IETF,
2077 November, 1996. This is a work in progress.
2078
2079
2080 15 Authors' addresses
2081
2082 Jeffrey C. Mogul
2083 Western Research Laboratory
2084 Digital Equipment Corporation
2085 250 University Avenue
2086 Palo Alto, California, 94305, U.S.A.
2087 Email: mogul@wrl.dec.com
2088 Phone: 1 415 617 3304 (email preferred)
2089
2090 Paul J. Leach
2091 Microsoft
2092 1 Microsoft Way
2093 Redmond, Washington, 98052, U.S.A.
2094 Email: paulle@microsoft.com
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109 Mogul, Leach [Page 37]

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24