A proxy that caches some responses and not others, for whatever
reason, may choose to implement the Meter header as a caching proxy
for the responses that it caches, and as a non-caching proxy for the
responses that it does not cache, as long as its external behavior
with respect to any particularly response is fully consistent with
this specification.
RFC 2227 Hit-Metering and Usage-Limiting October 1997
5.6 Implementation by cooperating caches
Several HTTP cache implementations, most notably the Harvest/Squid
cache [2], create cooperative arrangements between several caches.
If such caches use a protocol other than HTTP to communicate between
themselves, such as the Internet Cache Protocol (ICP) [12], and if
they implement the Meter header, then they MUST act to ensure that
their cooperation does not violate the intention of this
specification.
In particular, if one member of a group of cooperating caches agrees
with a server to hit-meter a particular response, and then passes
this response via a non-HTTP protocol to a second cache in the group,
the caches MUST ensure that the server which requested the metering
receives reports that appropriately account for any uses or resues
made by the second cache. Similarly, if the first cache agreed to
usage-limit the response, the total number of uses by the group of
caches MUST be limited to the agreed-upon number.
6 Examples
6.1 Example of a complete set of exchanges
This example shows how the protocol is intended to be used most of
the time: for hit-metering without usage-limiting. Entity bodies are
omitted.
A client sends request to a proxy:
GET http://foo.com/bar.html HTTP/1.1
The proxy forwards request to the origin server:
GET /bar.html HTTP/1.1
Host: foo.com
Connection: Meter
thus offering (implicitly) "will-report-and-limit".
The server responds to the proxy:
HTTP/1.1 200 OK
Date: Fri, 06 Dec 1996 18:44:29 GMT
Cache-control: max-age=3600
Connection: meter
Etag: "abcde"
RFC 2227 Hit-Metering and Usage-Limiting October 1997
thus (implicitly) requiring "do-report" (but not requiring
usage-limiting).
The proxy responds to the client:
HTTP/1.1 200 OK
Date: Fri, 06 Dec 1996 18:44:29 GMT
Etag: "abcde"
Cache-control: max-age=3600, proxy-mustcheck
Age: 1
Since the proxy does not know if its client is an end-system, or a
proxy that doesn't do metering, it adds the "proxy-mustcheck"
directive.
Another client soon asks for the resource:
GET http://foo.com/bar.html HTTP/1.1
and the proxy sends the same response as it sent to the other client,
except (perhaps) for the Age value.
After an hour has passed, a third client asks for the response:
GET http://foo.com/bar.html HTTP/1.1
=16= |