Re: [EXTERNAL] Re: Response for unsupported conditional request

On Tue, Feb 04, 2025 at 11:32:27AM +1100, Martin Thomson wrote:
> On Tue, Feb 4, 2025, at 11:04, Mike Kistler wrote:
> 
> > I'm still struggling to understand this. When I read this in RFC 9110 
> > (Section 13.1.1.):
> >
> >> When an origin server receives a request that selects a representation 
> >> and that request includes an If-Match header field, the origin server 
> >> MUST evaluate the If-Match condition per Section 13.2 prior to 
> >> performing the method.
> >
> > Am I to understand that the "MUST" here actually means "MUST if the 
> > origin server decides to handle If-Match, which it is not obligated to 
> > do"?
> 
> Yeah, this is one of those cases where the MUST probably has an implicit "if you choose to support this condition" attached to it.
> 
> Imagine that you had a new condition field called "If-YouFeelLikeIt".  There is no expectation that every resource on every server supports that, so any MUST-level statement you make about processing that field comes with an implicit "if you support and implement this field" attached.  Most servers and resources won't support this field and so clients cannot expect that the condition would be followed.
> 
> The same basically applies to all of the core conditional fields.  Support for those is discretionary and most resources don't plan to support the field, so don't even go looking for it.  No matter how many MUSTs you hit people with, you aren't going to be able to force them to implement them.
> 
> It's a bit weird because this is THE HTTP RFC (tm) and you might expect that people implement the whole thing, but in practice, the reason that HTTP is so successful is that people don't have to.
> 
> That's something that the specification could perhaps be better at.

Actually it would be helpful if mentioned in section 2.2 that the spec
is split into many sections each covering one particular mechanism or
optional feature, and that the rules there apply to those implementing
the feature. A good example is optional support for methods beyond GET
and HEAD. There are some MUST in some of them (e.g. PUT) despite these
methods being explicitly mentioned as optional.

Willy

Received on Tuesday, 4 February 2025 03:31:06 UTC