- From: Julian Reschke <julian.reschke@gmx.de>
- Date: Mon, 18 Jul 2011 19:32:25 +0200
- To: Mark Nottingham <mnot@mnot.net>
- CC: httpbis Group <ietf-http-wg@w3.org>
On 2011-07-17 04:19, Mark Nottingham wrote: > Proposal: > ... Works for me; proposed patch in <http://trac.tools.ietf.org/wg/httpbis/trac/attachment/ticket/285/285.diff>. I wasn't entirely sure where to put the new text in 5.1; right now the whole subsection reads like this...: 5.1. Server-driven Negotiation If the selection of the best representation for a response is made by an algorithm located at the server, it is called server-driven negotiation. Selection is based on the available representations of the response (the dimensions over which it can vary; e.g., language, content-coding, etc.) and the contents of particular header fields in the request message or on other information pertaining to the request (such as the network address of the client). Server-driven negotiation is advantageous when the algorithm for selecting from among the available representations is difficult to describe to the user agent, or when the server desires to send its "best guess" to the client along with the first response (hoping to avoid the round-trip delay of a subsequent request if the "best guess" is good enough for the user). In order to improve the server's guess, the user agent MAY include request header fields (Accept, Accept-Language, Accept-Encoding, etc.) which describe its preferences for such a response. Server-driven negotiation has disadvantages: 1. It is impossible for the server to accurately determine what might be "best" for any given user, since that would require complete knowledge of both the capabilities of the user agent and the intended use for the response (e.g., does the user want to view it on screen or print it on paper?). 2. Having the user agent describe its capabilities in every request can be both very inefficient (given that only a small percentage of responses have multiple representations) and a potential violation of the user's privacy. 3. It complicates the implementation of an origin server and the algorithms for generating responses to a request. 4. It might limit a public cache's ability to use the same response for multiple user's requests. Server-driven negotiation allows the user agent to specify its preferences, but it cannot expect responses to always honour them. For example, the origin server might not implement server-driven negotiation, or it might decide that sending a response that doesn't conform to them is better than sending a 406 (Not Acceptable) response. Many of the mechanisms for expressing preferences use quality values to declare relative preference. See Section 6.4 of [Part1] for more information. HTTP/1.1 includes the following header fields for enabling server- driven negotiation through description of user agent capabilities and user preferences: Accept (Section 6.1), Accept-Charset (Section 6.2), Accept-Encoding (Section 6.3), Accept-Language (Section 6.4), and User-Agent (Section 9.9 of [Part2]). However, an origin server is not limited to these dimensions and MAY vary the response based on any aspect of the request, including aspects of the connection (e.g., IP address) or information within extension header fields not defined by this specification. Note: In practice, User-Agent based negotiation is fragile, because new clients might not be recognized. The Vary header field (Section 3.5 of [Part6]) can be used to express the parameters the server uses to select a representation that is subject to server-driven negotiation. ...feedback appreciated, Julian
Received on Monday, 18 July 2011 17:32:57 UTC