#458: Requirements upon proxies for Expect

Hi Willy,

On 20/04/2013, at 7:18 PM, Willy Tarreau <w@1wt.eu> wrote:

> On Sat, Apr 20, 2013 at 07:00:19PM +1000, Mark Nottingham wrote:
>> p2 5.1.1 "Requirements for HTP/1.1 proxies" bullet one effectively requires
>> proxies to forward ALL requests with Expect: 100-continue if the inbound
>> server is HTTP/1.1 -- even if the request is a GET.
>> 
>> I know that this isn't the intent, but that's how it reads; suggest
>> qualifying this to only apply to requests with bodies.
> 
> Do you see any risk in applying this to any request ? I've been thinking
> in the past about the possibility to use Expect to send non-idempotent
> requests over existing connections without fearing the risk of a broken
> connection, but the stupid situation where a client sends an empty POST
> with Expect is still problematic. All this to say that there might be
> some usages of Expect that are not covered here and not problematic
> either.

Sorry, I'm not following you here. What do you want to do?


>> The next bullet requires proxies to respond with a 417 if the inbound server
>> is HTTP/1.0. Just curious here - why? Wouldn't the maximally interoperable
>> thing be to generate a 100-continue yourself? While the client *could*
>> resubmit the request, they probably won't, because as far as they know, the
>> origin told them not to.
> 
> That's exactly what I thought as well when reading this point ! And FWIW,
> haproxy does so when it needs to parse part of the request body to pick
> a server. I think that was the exact intended purpose of skipping as
> many "100" responses as needed BTW.


OK. How do other folks feel about this? I think the proposal is to change:

> If the proxy knows that the version of the next-hop server is HTTP/1.0 or lower, it must not forward the request, and it must respond with a 417 (Expectation Failed) status code.

to:

"""
If the proxy knows that the version of the next-hop server is HTTP/1.0 or lower, it MAY either respond with a 417 (Expectation Failed) without forwarding the request, or with a 100 (Continue) status code while forwarding it.
"""

Note that this is applying to proxies, NOT gateways (like haproxy), which AFAICT don't have any requirements applying to them. Hmm.

I'd also really like to see us define what "final status code" means; is it just 417? Any 4xx or 5xx status? Any non-1xx status?

Cheers,

--
Mark Nottingham   http://www.mnot.net/

Received on Thursday, 30 May 2013 09:28:05 UTC