Subject: Re: [Gen-art] Gen-ART review of draft-snell-http-prefer-14

From: Martin Thomson <[email-masked]>
Date: Fri, 12 Oct 2012 11:58:33 -0700

I have reviewed -15 of this draft and my major issues have been
resolved.  This document is ready.

On 21 September 2012 16:43, Martin Thomson <[email-masked]> wrote:
> Lucky you.  I am the assigned Gen-ART reviewer for this draft. For
> background on Gen-ART, please see the FAQ at
>   <http://wiki.tools.ietf.org/area/gen/trac/wiki/GenArtfaq>.
>
> Please resolve these comments along with any other Last Call comments
> you may receive.
>
> Document: draft-snell-http-prefer-14
> Reviewer: Martin Thomson
> Review Date: 2012-09-21
> IETF LC End Date: 2012-10-12
>
> Summary: This document is in pretty good shape.  I have a concern over
> how Prefer: wait might be implemented that I believe needs to be
> addressed prior to publication as Proposed Standard.  There are also a
> number of additional concerns, though nothing particularly serious.
>
> Major issues:
>
> Section 3.4 specifies timing requirements that a server has to act
> upon with no good way of gaining the information it needs.  It assumes
> clock synchronization. Given that terrible clock synchronization is
> the default mode of operation for internet hosts, this seems to be a
> poor choice.
>
> In any case, this design forces a server to wait less than the allowed
> time in all cases, but gives the server no good information to choose
> an appropriate time adjustment.  A server has to assume that the
> client has already expended some period waiting.  Assuming that the
> client is going to abandon the request at the identified time, then
> the server is obliged to wait less than the entire period, lest the
> response be wasted.  Even if we assume that clocks are synchronized,
> the resolution of Date and wait are capped at a second, so worst case
> we have a 1 second window of uncertainty on when the request was sent.
>  This is worse if there are clock errors, particularly if the client
> clock runs ahead of the server.
>
> I can't see how I would implement this feature so that it behaves
> reliably for arbitrary hosts.
>
> On the other hand, the client has the ability to make its own
> determination about clock synchronization and network transit delays.
> A single request with wait=0 would provide a good measurement of total
> non-server delays, without any quantization noise (Date is rounded or
> trimmed to the second, which makes this determination difficult).  The
> client could then adjust the value of the wait preference to account
> for what it learns, with the server being able to then concentrate on
> the time elapsed between receipt and sending.  Clock differences are
> then irrelevant.
>
> Minor comments:
>
> In Section 3.2:
>
>    When honoring the "return-representation" preference, the server MUST
>    include a Content-Location header field specifying the URI of the
>    resource representation being returned.
>
> This is a requirement that could be inadvertently violated by servers.
>  This really isn't what you are intending here.  The idea is to ensure
> that the returned representation doesn't get mistaken for a
> representation of the request URI, *when it is not*.  This does not
> require 2119 language to convey, though I would agree that a reminder
> is necessary here.  How about:
>
>    The returned representation might not be a representation for the
> effective request
>    URI [[this is the term du jour, I believe]] when the request
> affects another resource.
>    The Content-Location header can be used to identify the URI of the returned
>    representation.
>
> (I'd note that return-representation is less useful for PUT than POST
> or PATCH.  You don't mention PATCH at all.)
>
> In Sections 3.2 and 3.3, the mutual exclusivity of these parameters is
> handled differently to the strict/lenient parameters.  Instead of all
> the 2119 stuff, how about:
>
>    The "return-minimal" and "return-representation" preferences are
>    mutually exclusive directives.  A request that contains both preferences
>    can be treated as though neither were specified.
>
> Alternatively, did you consider specifying a single preference here?
> i.e., Prefer: return=minimal and Prefer: return=representation
>
> Section 3.5, is it useful to observe that the "strict" preference is
> useful for ensuring that all aspects of a request are handled, so that
> recoverable errors don't result in important parts of a request being
> "missed" by a server?
>
> Did you consider a single preference here?  i.e., Prefer:
> processing=strict or Prefer: processing=lenient
>
> Regarding Section 3.5, which do we assume to be the existing behavior
> for a server?  strict or lenient?
>
> I'd ask an IANA considerations expert to look at Section 4.1.  Did you
> want something other than the strict letter of "Specification
> Required"?
>
> Nits:
>
> The wording of Section 2.1 is a little contorted.  The second
> paragraph is a single sentence.  "event just potentially" is a little
> redundant.  Suggest a reword to cover just the key points:
>  - Prefer is not intended to affect content negotiation.
>  - If a preference could affect what a cache stores or how it stores
> it [httpbis-p6], then the server MUST use Vary: Prefer.  This applies
> even if the request does not include Prefer.
> Caution is always good, but advising its application doesn't improve
> the probability of it being applied.
>
> Example 3 in Section 2.2 implies semantics for the undefined "status"
> argument.  Doing this begs the question about whether this should have
> been specified.  Rather than invite such questions, try using a
> generic argument with a nonsensical name.  (Priority in the previous
> example is OK, because it's inherently meaningless anyway.)
>
> You have a few references that aren't really necessary.  I don't see
> much relevance in httpbis-p7, for example.