- From: James M Snell <jasnell@gmail.com>
- Date: Thu, 02 Aug 2007 23:18:20 -0700
- To: HTTP Working Group <ietf-http-wg@w3.org>
Ok, the recent conversation around the use of the 200/204 status codes in the current PATCH draft has indicated that a couple of new status codes and a new request header would likely be helpful. So how about something like this: --- 208 Content Returned The request has succeeded. The information returned with the response is equivalent to what would be returned in a subsequent GET on the resource. 418 Preference Failed The preference given in a Prefer request-header field was understood by could not be met by this server. Prefer header The Prefer request-header field is used to indicate that particular server behaviors are preferred by the client. Prefer = "Prefer" ":" 1#preference preference = "208-content-returned" | "204-no-content" | preference-extension preference-extension = token [ "=" ( token | quoted-string ) *preference-params ] preference-params = ";" token [ "=" ( token | quoted-string ) ] A server that does not understand or is unable to comply with any of the preference values in the Prefer field of a request MUST ignore those values. The server MAY response with a 418 (Preference Failed) status if any of the preferences cannot be met. This header field is defined with extensible syntax to allow for future extensions. If a server receives a request containing a Prefer field that includes a preference-extension that it does not support, it MUST ignore that extension. Comparison of preference values is case-insensitive for unquoted tokens including 208-content-returned and 204-no-content, and is case-sensitive for quoted-string expectation-extensions. The Prefer mechanism is hop-by-hop; that is, an HTTP/1.1 proxy MAY fulfill a Preference if it receives a request with a preference it can meet. However, the Prefer request-header itself is end-to-end; it MUST be forwarded if the request is forwarded. A Prefer field that includes the 208-content-returned value indicates that the client prefers that the server respond with a 208 status. A Prefer field that includes the 204-no-content value indicates that the client prefers that the server respond with a 204 status. --- Example 1: Successful response, preference fulfilled PATCH /foo HTTP/1.1 Prefer: 208-content-returned Content-Type: ... {patch document} HTTP/1.1 208 Content Returned Content-Type: ... Etag: ... {resource content} --- Example 2: Successful response, preference fulfilled PATCH /foo HTTP/1.1 Prefer: 204-no-content Content-Type: ... {patch document} HTTP/1.1 204 No Content --- Example: Successful response, preference ignored PATCH /foo HTTP/1.1 Prefer: 208-content-returned Content-Type: ... {patch document} HTTP/1.1 200 OK Content-Type: ... Warning: 601 server "Preference Ignored" {some data} --- Example: Successful response, preference fulfilled by a proxy rather than the origin server PATCH /foo HTTP/1.1 Prefer: 204-no-content Content-Type: ... {patch document} HTTP/1.1 204 No-Content Warning: 602 proxy "Preference Fulfilled --- Example: Server chose not to fulfill or ignore the preference PATCH /foo HTTP/1.1 Prefer: 208-content-returned Content-Type: ... {patch document} HTTP/1.1 418 Preference Failed {error response} --- The Prefer header is defined to be generally identical to Expect with the difference being that Prefer MUST be ignored if it is not understood. A server can choose not to fulfill a preference and communicate that choice to the client using 418, but proxies are required to forward them on. A proxy can choose to fulfill a preference if it is capable. For instance, a proxy that receives a 200 or 209 response to a request that contains Prefer: 204-no-content can choose to return 204 No Content to the client rather than the complete original response. If the request contains 209-content-returned and the server responds with 200 or 204 (or whatever), then it obviously will not be capable of fulfilling the preference and must ignore it. Thoughts? - James
Received on Friday, 3 August 2007 06:18:30 UTC