Re: [hybi] New port and Tunneling?

Willy Tarreau <w@1wt.eu> Mon, 16 August 2010 06:03 UTC

Return-Path: <w@1wt.eu>
X-Original-To: hybi@core3.amsl.com
Delivered-To: hybi@core3.amsl.com
Received: from localhost (localhost [127.0.0.1]) by core3.amsl.com (Postfix) with ESMTP id BD4DE3A695A for <hybi@core3.amsl.com>; Sun, 15 Aug 2010 23:03:00 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.799
X-Spam-Level:
X-Spam-Status: No, score=-2.799 tagged_above=-999 required=5 tests=[AWL=-0.756, BAYES_00=-2.599, HELO_IS_SMALL6=0.556]
Received: from mail.ietf.org ([64.170.98.32]) by localhost (core3.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Ih-vpdyG9HBm for <hybi@core3.amsl.com>; Sun, 15 Aug 2010 23:03:00 -0700 (PDT)
Received: from 1wt.eu (1wt.eu [62.212.114.60]) by core3.amsl.com (Postfix) with ESMTP id 865093A6819 for <hybi@ietf.org>; Sun, 15 Aug 2010 23:02:59 -0700 (PDT)
Received: (from willy@localhost) by mail.home.local (8.14.4/8.14.4/Submit) id o7G63XV7031068; Mon, 16 Aug 2010 08:03:33 +0200
Date: Mon, 16 Aug 2010 08:03:33 +0200
From: Willy Tarreau <w@1wt.eu>
To: Greg Wilkins <gregw@webtide.com>
Message-ID: <20100816060333.GP27614@1wt.eu>
References: <b13c89a75303a5d97edcb78926b385be.squirrel@sm.webmail.pair.com> <20100815234010.GM27614@1wt.eu> <52530df7491f03990cbfffd3eb49bcb6.squirrel@sm.webmail.pair.com> <AANLkTi==qsBWRDhxten+fV91bYiBhJ_vhSoqPNpsp3Pb@mail.gmail.com> <28d4e6c08e65e43899d59478e332a8aa.squirrel@sm.webmail.pair.com> <AANLkTikCKFCCWue5xqGhNssUSCuf_uEQyuCoW9GGH2N5@mail.gmail.com> <f5eacee9dece3b4feb6ebcd017bd5977.squirrel@sm.webmail.pair.com> <AANLkTikMY0CHSqvQU9uRHiDrmotQDP1dtWwkiLAOYr=9@mail.gmail.com> <20100816051831.GN27614@1wt.eu> <AANLkTi==Tf2zzNeP9jaRzuw7P+dnbsqhkVF046rk0k3S@mail.gmail.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <AANLkTi==Tf2zzNeP9jaRzuw7P+dnbsqhkVF046rk0k3S@mail.gmail.com>
User-Agent: Mutt/1.4.2.3i
Cc: hybi@ietf.org
Subject: Re: [hybi] New port and Tunneling?
X-BeenThere: hybi@ietf.org
X-Mailman-Version: 2.1.9
Precedence: list
List-Id: Server-Initiated HTTP <hybi.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/hybi>
List-Post: <mailto:hybi@ietf.org>
List-Help: <mailto:hybi-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/hybi>, <mailto:hybi-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 16 Aug 2010 06:03:00 -0000

On Mon, Aug 16, 2010 at 03:51:26PM +1000, Greg Wilkins wrote:
> Willy,
> 
> I agree with your analysis of the problem, but I remain hopeful that a
> better solution than Connection:close may be found, as this prevents
> the HTTP connection being used after a failed upgrade (by a BOSH/comet
> fallback).

To be honnest, I have very little hope of being able to reuse a connection
after a handshake failure, because this failure will not come from the
server itself (otherwise the application would not have proposed WS at all)
but from client-side intermediaries (proxy or transparent proxies). And it's
hard to guess the state the connection will be in.

Now that you're talking about it, I now remember why we suggested the close
on the server side too. Last week I told Ian I forgot the reason. It was
precisely for that : ensure the proxy won't process the next request without
blocking it at the request level. Basically, if the server sends a close but
not the client, then the proxy will not try to process the second request,
even if it does not understand the Upgrade. This will result in a faster
fail.

> Having the server send a ws message after the handshake should be a
> good way to quickly detect this problem.

In my opinion, the data at the end of the handshake should be put in a WS
message. In fact it could be a "pong". That would probably mean less work
for the client as all it would have to do is call the same code on the data
block that comes after the 101.

> Adding a simple checksum to
> the framing would also quickly detect most varieties of intermediaries
> not acting as pure tunnels.

Possibly, but if we're worried about them, then we should as well support
acknowledgements, because when connections are cut on timeout, you never
know what part has correctly been forwarded. But doing all this will result
in a more complex protocol. Probably that the checksum could be added later
as an extension in the frames if needed.

Regards,
Willy