Re: [hybi] Shipping WebSockets

Willy Tarreau <w@1wt.eu> Thu, 16 December 2010 06:34 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 43FD63A6FE8 for <hybi@core3.amsl.com>; Wed, 15 Dec 2010 22:34:02 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.666
X-Spam-Level:
X-Spam-Status: No, score=-1.666 tagged_above=-999 required=5 tests=[AWL=-0.823, BAYES_00=-2.599, HELO_IS_SMALL6=0.556, J_CHICKENPOX_22=0.6, J_CHICKENPOX_42=0.6]
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 HuLaw+kIqjbW for <hybi@core3.amsl.com>; Wed, 15 Dec 2010 22:34:00 -0800 (PST)
Received: from 1wt.eu (1wt.eu [62.212.114.60]) by core3.amsl.com (Postfix) with ESMTP id 793233A6FE2 for <hybi@ietf.org>; Wed, 15 Dec 2010 22:33:59 -0800 (PST)
Received: (from willy@localhost) by mail.home.local (8.14.4/8.14.4/Submit) id oBG6ZfWL017655; Thu, 16 Dec 2010 07:35:41 +0100
Date: Thu, 16 Dec 2010 07:35:41 +0100
From: Willy Tarreau <w@1wt.eu>
To: Zhong Yu <zhong.j.yu@gmail.com>
Message-ID: <20101216063541.GA17613@1wt.eu>
References: <B0B3789C-1D3C-4A4E-B37F-8F43FFC7D905@mnot.net> <AANLkTi=5fFeNkWOwAn1PiWp3AsOGBaJngP_Uwja63k03@mail.gmail.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <AANLkTi=5fFeNkWOwAn1PiWp3AsOGBaJngP_Uwja63k03@mail.gmail.com>
User-Agent: Mutt/1.4.2.3i
Cc: "hybi@ietf.org HTTP" <hybi@ietf.org>
Subject: Re: [hybi] Shipping WebSockets
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: Thu, 16 Dec 2010 06:34:02 -0000

On Wed, Dec 15, 2010 at 05:21:56AM -0600, Zhong Yu wrote:
> I'm leaning towards a distinct, non-HTTP approach, with some HTTP
> resemblance conservatively and carefully added to it. My proposal will
> be somewhere close to Mark's approach #2 and #3.
> 
> From a purist's stand, WS should be distinct. It should not be easily
> confused as HTTP(or other protocols) by existing or future programs.

I don't completely agree with you. We're discussing on a list whose
name means "bidirectional HTTP". And "old" draft here from Sal already
mentions WS as one of the bidirectional HTTP protocols :

   http://tools.ietf.org/html/draft-loreto-http-bidirectional-00

And this presentation does so too :

   http://www.ietf.org/proceedings/74/slides/apparea-3.pdf

So the work was really initiated by the wish to get something very
closely tied to HTTP.

> However there are strong pressures to have *some* HTTP-ness in WS.
> People want some existing HTTP components to work with WS with no(or
> little) modification. People want to keep some HTTP features in WS
> without reinventing an alien syntax.
> 
> An apparent answer to these demands is to make WS looks almost like
> HTTP, even make it 100% HTTP compliant. This answer is not only over
> reaching, but also improbable to achieve.

No, at least two mechanisms in HTTP explicitly permit this (CONNECT
for proxies and Upgrade for servers). It's just that we've found some
non-100% compliant implementations that risk to break in a bad way.
Instead of using dirty tricks to make the thing even less compliant
and having more reasons to see it randomly fail, we're trying to make
it compliant and to use tricks to ensure most of the non-compliant ones
will cleanly fail.

Protocol compliance is an important point because it gives an argument
to customers to ask their providers for fixing their products. While you
can sometimes wait several years for a feature upgrade (eg: "please, when
will you support websocket ?") it can be a lot faster when you say "hey,
your crap is subject to CVE-2011-XXXX and my users can exploit it to
corrupt its cache, hurry up to bring a fix".

Another advantage is that instead of having to check multiple docs, the
implementer only has to get back to his beloved HTTP spec and discover
that he did not correctly process the 1xx responses and that he just has
to find a way to get that fixed.

I did it in haproxy, in the past, 1xx would have been considered as 2xx
or 3xx. The fix only took a few hours, tests included. And fixing that
magically brought compatibility with the protocols transported over an
upgrade request.

That's why in my opinion protocol compliance can achieve faster deployment
and adoption than relying on a stack of invalid syntaxes that will make
some valid components break without any incentive for the editors to fix
them.

Regards,
Willy