/[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 - (hide annotations) (download)
Tue Jun 15 08:04:04 2004 UTC (20 years, 10 months ago) by wakaba
Branch: MAIN
CVS Tags: HEAD
File MIME type: text/plain
New

1 wakaba 1.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  
Google Analytics is used in this page; Cookies are used. 忍者AdMax is used in this page; Cookies are used. Privacy policy.