- From: Duncan Cragg <duncan@cilux.org>
- Date: Wed, 18 Jan 2012 15:51:17 +0000
- To: ietf-http-wg@w3.org
- Message-ID: <4F16EA75.1020705@cilux.org>
I'm not certain of the protocol here, so if it's OK I'll just wade in
and hope for the
best...
I'd like to know if http-bis will tighten up the meanings of various
headers on a
request that contains a body: POST and PUT in particular. I'm wondering
how they will
compare to their meaning on a GET /response/.
Example
-------
For example, consider this GET response:
GET /x HTTP/1.1
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Length: 100
Cache-Control: max-age=3600
Etag: "1"
Content-Location: http://foo.com/y
..
Now suppose I had this very similar request with a body on a POST or a PUT:
POST|PUT /z HTTP/1.1
Content-Type: text/plain
Content-Length: 100
Cache-Control: max-age=3600
Etag: "1"
Content-Location: http://foo.com/y
..
Clearly, Content-Type and Content-Length are fine, and mean exactly the
same as on the
GET response. But what of Cache-Control, Etag and Content-Location?
Note that I'm not considering the meaning of the target (/z, here). I'm
assuming only
that someone has a valid reason to want to tie up the metadata to its
entity, for either
PUT or POST. Maybe I want to notify via POST an indexer at /z that there
is an interesting
resource at http://foo.com/y , which had an Etag of "1" and TTL of 3600
when I fetched it?
RFC2616
-------
The current spec says, for PUT, there is 'Must-Understand' on all
Content-* headers, and
that 'entity-headers in the PUT request SHOULD be applied to the
resource created or
modified by the PUT'.
Thus it gives hope of interpreting a sensible meaning for the Expires
(similar in use to
the max-age), Last-Modified (similar in use to Etag) and
Content-Location headers, at
least in the context of a PUT request: implying that they are associated
with the
request entity. POST has nothing similar to say.
Now the Cache-Control on a request normally attempts to effectively
modify the
Cache-Control of the subsequent response, rather than, as here, being
intended to
describe the TTL or lifetime of the request entity. Thus it may clash
for such a use, or,
since there is no real need for the existing meaning for PUT and POST,
it could be
specified as applying to the request entity in particular for those
methods, especially
since we may interpret the old Expires this way.
Similarly, we are allowed to suggest a Last-Modified header value, but
not an Etag,
which has a different, non-entity or 'response-header' status, even
though used in a
very similar way.
Finally, we have: "The meaning of the Content-Location header in PUT or
POST requests is
undefined; servers are free to ignore it in those cases." Which is slightly
contradictory to the hope offered by the preceding text!
Bis
---
I'm not going to pretend I've deeply read and tracked the work here -
it's a full-time
job, I'm sure. I tried to find relevant material, though.
Here, for PUT, we have 'Unrecognized header fields SHOULD be ignored
(i.e., not saved as
part of the resource state).' A superficial skim indicates that much of
the above wording
has been removed. Tickets 79 & 102 seem to be related. So it seems to be
less clear than
before that we can associate such headers this way?
Or are we now more free, to decide to 'recognize header fields and save
them with the
resource state'? Which ones?
Here's more on Content-Location on requests (presumably either PUT or
POST, although the
comment is specifically about trying to manipulate PUT):
.. Content-Location .. MAY be
interpreted by the origin server as an indication of where the user
agent originally obtained the content of the enclosed representation
.. the Content-Location
cannot be used as a form of reverse content selection that identifies
only one of the negotiated representations to be updated...
Which seems fine. But sadly:
A Content-Location field received in a request message is transitory
information that SHOULD NOT be saved with other representation
metadata for use in later responses. The Content-Location's value
might be saved for use in other contexts, such as within source links
or other metadata.
I don't understand 'source links or other metadata', however. Perhaps
some extra wording
would help future readers? Maybe we can still submit something using
POST to our indexer?
Summary
-------
So there is some information in the RFC and in Bis, but it isn't a
complete or, to me,
very clear set, particularly around decoration of POST bodies/entities
with metadata.
What do the core of this list think about all this?
Cheers!
Duncan Cragg
Received on Wednesday, 18 January 2012 15:51:48 UTC