- From: Yves Lafon <ylafon@w3.org>
- Date: Fri, 27 Feb 1998 09:58:17 +0100 (MET)
- To: Paul Pazandak <pazandak@OBJS.com>
- cc: www-jigsaw@w3.org
On Wed, 25 Feb 1998, Paul Pazandak wrote:
>
> Lessons learned:
>
> We've found that there is a lot to determining the size of a downloaded resource
> when Jigsaw acts as a proxy. First, if the resource is cached in the proxy or
> on the client, then no resource is downloaded and there is no input stream (assuming
> that the resource has not been modified and therefore the HTTP response is
> "304 Not Modified").
>
> Second, if there is a valid reply, the input stream associated with the reply may or
> may not support marking. If it does, then simply mark it, read it (and count the
> length), and the reset it. If it doesn't supporting marking, one can read it only
> once. Therefore, (as far as I know) you must read it into a (string)buffer while
> counting the bytes, then do a reply.setContent(new String(buffer)), then close
> the stream. (Is there a better way?)
When you use the cache, the stream is divided in two streams, using a tee
(see w3c.www.protocol.http.cache.ActiveStream), this stream is used to
dump the stream in one file (ie: create a resource) and send the stream
directly to the client. Then just counting the bytes on the dumped stream
is enough (it can be just a "StreamEater" for example, faster than using
a stringbuffer... as we are using bytes (you must use readers and
writers for strings).
If the resource is already in the cache, the lenght info is already there.
> This should apply as well to any outgoing filter that wants to modify a reply
> (i.e., it will need to be extracted from the input stream before it can be modified).
>
> Paul.
>
> p.s. a code snip is available if anyone is interested.
/\ - Yves Lafon - World Wide Web Consortium -
/\ / \ Architecture Domain - Jigsaw
/ \ \/\
/ \ / \ http://www.w3.org/People/Lafon - ylafon@w3.org
Received on Friday, 27 February 1998 03:58:42 UTC