- From: Yaron Goland <yarong@microsoft.com>
- Date: Sun, 7 Sep 1997 13:34:23 -0700
- To: 'Jeffrey Mogul' <mogul@pa.dec.com>, http-wg%cuckoo.hpl.hp.com@hplb.hpl.hp.com
So said Jeffrey:
>(1) recipients MUST be able to deal with any
>content-dependent header in the trailer of a chunked
>encoding.
I think this makes a great discussion item, for HTTP/1.2
Yaron
> -----Original Message-----
> From: Jeffrey Mogul [SMTP:mogul@pa.dec.com]
> Sent: Friday, September 05, 1997 3:25 PM
> To: http-wg%cuckoo.hpl.hp.com@hplb.hpl.hp.com
> Subject: Re: Last-Modified in chunked footer
>
> I've been thinking about this issue for a few days. My original
> message, discussing just the effects on proxies, was clearly
> insufficient; there are many user agents that want to see some
> of the headers before the entire message has arrived, so that
> (for example) they can start rendering HTML as it arrives.
>
> But I think we are running into a basic confusion between
> what is "necessary" and what is "fast".
>
> The original motivation for trailers was to allow a server
> that was generating content on the fly to send a header
> (e.g., Content-MD5) that could not be generated before the
> entire content.
>
> Similarly, the desire of a browser to see, say, Content-type
> at the beginning of a message is so that it can render the
> message "on the fly".
>
> And the analysis that I sent a few days ago looked at
> what a proxy would need to know in order to forward a response
> "on the fly", without having to first buffer it.
>
> Clearly, if a response is based on a static value, it seems
> preferrable (and easiest) if the server puts the headers before
> the content. The trickier question is for dynamically-generated
> responses.
>
> In many (most) cases, any implementation (server, proxy, or client)
> could, in principle, buffer the entire message so that it
> would not be handled on the fly. While this would certainly
> add latency (perhaps unacceptable latency), it would not force
> incorrect behavior. (This assumes that the client *knows* that
> it needs to buffer the message, which is a separate issue).
>
> In some cases, however (such as an indefinitely long server push),
> it is actually impossible to buffer the entire response at any
> point. In such cases, one clearly needs to put the headers
> before the content! This would seem to preclude the use of
> Content-MD5 (and some forms of Digest Authentication?) in these
> cases.
>
> In all of the other cases of responses "generated on the fly",
> however, the question seems to be "who gets stuck having to buffer
> the entire message?" If there are any header fields whose value
> depends on the value of the body, one end (at least) is going
> to have to do this. It could either be the sender or the receiver;
> which one makes more sense?
>
> From a "correctness" point of view, the answer is "neither, if
> the recipient knows to expect trailers." From an efficiency
> point of view, however, I think it's better to have the sender
> do the buffering, in most cases.
>
> The reason for this is, except in rare cases, it takes
> less time to generate the response at the server than it
> takes to transmit it over the network. Therefore, buffering
> at the server means adding a relatively short delay before
> the client can start rendering the content. Buffering at
> the client, on the other hand, means that one has to pay
> for the entire network latency for the entire response before
> any rendering can take place.
>
> Thus, in general, I would expect that server designers who
> want to minimize "user perceived latency" would be willing
> to buffer their non-infinite responses, if this is what it
> takes to add content-dependent headers in front of the content.
>
> However, this does not mean that we should force a server
> to buffer responses. It may not be possible (the server
> may have limited resources, or the response may be indefinitely
> long). This means that clients ought to have the ability
> to correctly (if belatedly!) render any response with any
> content-dependent header in the trailer. (People have pointed
> out that the Vary header might possibly be content-dependent,
> but this header should never affect rendering.)
>
> What this boils down to is a version of the Robustness
> Principle ("be conservative in what you send, be liberal
> in what you accept").
>
> I would propose that the spec make what appears to be
> a contradictory set of requirements:
>
> (1) recipients MUST be able to deal with any
> content-dependent header in the trailer of a chunked
> encoding.
>
> (2) senders SHOULD NOT put any headers in the
> trailer unless it is impossible to put the
> headers before the content, or unless the
> cost of putting the header before the content
> is larger than the expected network latency
> for transmitting the entire response.
>
> (3) The set of content-dependent headers may
> be extended in the future, but currently includes
> Content-*
> Expires
> Etag
> Vary
> Last-Modified
> Authorization
> AuthenticationInfo
> (and probably a few others that I'm missing).
>
> It does seem reasonable to introduce a "hint" (i.e., non-mandatory)
> response-header, as suggested by both Maurizio Codogno and by
> Klaus wide, that tells the recipient "look in the trailer before
> rendering" (as in the Postscript "(atend)" comment). Since I don't
> think we can successfully insist that all clients MUST delay rendering
> if they see such a header, it can only be a "hint", but at least
> it gives the client a chance to decide (based on user preferences?)
> whether to be cautious or low-latency.
>
> -Jeff
Received on Sunday, 7 September 1997 13:39:24 UTC