Re: Comments/Issues on P1

Amos Jeffries <> Tue, 24 April 2012 06:22 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 7AEAD21F85A3 for <>; Mon, 23 Apr 2012 23:22:52 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -9.854
X-Spam-Status: No, score=-9.854 tagged_above=-999 required=5 tests=[AWL=0.745, BAYES_00=-2.599, RCVD_IN_DNSWL_HI=-8]
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id 1RL83LkmLNAe for <>; Mon, 23 Apr 2012 23:22:51 -0700 (PDT)
Received: from ( []) by (Postfix) with ESMTP id 1ED5F21F855D for <>; Mon, 23 Apr 2012 23:22:51 -0700 (PDT)
Received: from lists by with local (Exim 4.69) (envelope-from <>) id 1SMZ7X-0000PS-OG for; Tue, 24 Apr 2012 06:21:03 +0000
Received: from ([]) by with esmtp (Exim 4.69) (envelope-from <>) id 1SMZ7I-0000NG-LI for; Tue, 24 Apr 2012 06:20:48 +0000
Received: from ([] by with esmtp (Exim 4.72) (envelope-from <>) id 1SMZ71-0008FI-8O for; Tue, 24 Apr 2012 06:20:38 +0000
Received: from [] (unknown []) by (Postfix) with ESMTP id 09CEAE6E76; Tue, 24 Apr 2012 18:20:04 +1200 (NZST)
Message-ID: <>
Date: Tue, 24 Apr 2012 18:20:03 +1200
From: Amos Jeffries <>
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20120327 Thunderbird/11.0.1
MIME-Version: 1.0
To: Willy Tarreau <>
References: <> <> <>
In-Reply-To: <>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Received-SPF: pass client-ip=;;
X-W3C-Hub-Spam-Status: No, score=-1.9
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001
X-W3C-Scan-Sig: 1SMZ71-0008FI-8O de85548436e2a22af3035d0ccccbfc3b
Subject: Re: Comments/Issues on P1
Archived-At: <>
X-Mailing-List: <> archive/latest/13469
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>
Resent-Message-Id: <>
Resent-Date: Tue, 24 Apr 2012 06:21:03 +0000

On 24/04/2012 5:33 p.m., Willy Tarreau wrote:
> Hi Amos,
> On Tue, Apr 24, 2012 at 03:56:52PM +1200, Amos Jeffries wrote:
>>> A server does not appear to be committed to supporting the same HTTP
>>> version from request to request, or from one URL to another on the
>>> same server. (As an example at the same address and under the same
>>> vhost, some URLs might be served by the "real" http server which
>>> fully
>>> supports HTTP/1.1, and some by CGI scripts which might only support
>>> HTTP/1.0.)
>> section 2.6 paragraph 7
>>    "Intermediaries that process HTTP messages (i.e., all intermediaries
>>     other than those acting as tunnels) MUST send their own HTTP-version
>>     in forwarded messages."
>> In the example you put forward, the vhost is a gateway intermediary for
>> the CGI script origin. The CGI has its own Server: header and version.
>> The gateway vhost has its own Server: header and version. Te relaying
>> vhost is responsible for upgrading the CGI responses to its 1.1 version.
>> The vhost being a gateway intermediary for the CGI is required to
>> downgrade the request for the CGI capabilities, and upgrade the
>> responses with its 1.1 version.
>> There is one exception. And that is where the client request arrives
>> with an older version. The server MAY downgrade its version to that
>> supported by the client.
> I didn't think about this point on versions, but now it scares me : if
> an intermediary pretends to be 1.1-compatible to a client when it talks
> to an 1.0 server, it may incite the client to know this and use some of
> the 1.1 extensions (eg: chunked encoding in requests) that the server
> will never be able to deal with and that are not always transformable
> by the intermediary. Similarly, if the intermediary pretends to the
> server that the request is 1.1 while the client was 1.0, it may incite
> the server to use such features (eg: chunked encoding again) that is
> impossible to transform to the client's version.

What features exactly do you see as non-translatable?

Chunked is not a good example there. It is trivially de-chunked into a 
unknown-lenth 1.0 entity.

The key word in yoru description is "pretends". Intermediaries that fake 
support without actually doing it will get themselves into trouble in 
some cases. The spec clauses are talking about actually compliant 

> I think that we should make the intermediary present the highest supported
> version between his and the original message, otherwise we'll cause huge
> interoperability issues.

It has not caused major issues to date with the 1.0->1.1 transition. The 
bigger issue has been supposedly 1.1-compatible clients not re-trying 
when presented with 417 and 412 responses. And server ignoring explicit 
1.0 version requests and sending chunked responses regardless.

> Well in fact I think that the issues comes down again to the boundary
> between tunnels and other intermediaries, because some intermediaries
> will minimally change the messages (eg: add an X-Forwarded-For or Via
> header) but will not affect the contents. In this regard they could be
> seen as tunnels though they're slightly more active and closer to
> gateways.
> Anyway, I think that the rule above requires infinite buffer to be
> strictly applied, which is problematic.
> Regards,
> Willy