Re: [hybi] #1: HTTP Compliance

Jamie Lokier <jamie@shareable.org> Mon, 17 May 2010 17:48 UTC

Return-Path: <jamie@shareable.org>
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 B0D4A3A6A7A for <hybi@core3.amsl.com>; Mon, 17 May 2010 10:48:39 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.083
X-Spam-Level:
X-Spam-Status: No, score=-1.083 tagged_above=-999 required=5 tests=[AWL=-1.084, BAYES_50=0.001]
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 FM6kvi3l--vy for <hybi@core3.amsl.com>; Mon, 17 May 2010 10:48:38 -0700 (PDT)
Received: from mail2.shareable.org (mail2.shareable.org [80.68.89.115]) by core3.amsl.com (Postfix) with ESMTP id 6E8983A6903 for <hybi@ietf.org>; Mon, 17 May 2010 10:48:34 -0700 (PDT)
Received: from jamie by mail2.shareable.org with local (Exim 4.63) (envelope-from <jamie@shareable.org>) id 1OE4QS-000719-8s; Mon, 17 May 2010 18:48:24 +0100
Date: Mon, 17 May 2010 18:48:24 +0100
From: Jamie Lokier <jamie@shareable.org>
To: Vladimir Katardjiev <vladimir@d2dx.com>
Message-ID: <20100517174824.GB20356@shareable.org>
References: <068.d07026741c6694cd80652d2a7d34f236@tools.ietf.org> <4BF106AD.6020506@webtide.com> <D5AE558E-59FF-40E7-AB66-C01F0D26DF67@d2dx.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <D5AE558E-59FF-40E7-AB66-C01F0D26DF67@d2dx.com>
User-Agent: Mutt/1.5.13 (2006-08-11)
Cc: Hybi <hybi@ietf.org>
Subject: Re: [hybi] #1: HTTP Compliance
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, 17 May 2010 17:48:39 -0000

Vladimir Katardjiev wrote:
> I assume the problem/desire/requirement is to reduce the number of
> round-trips required for the establishment of a new connection. The
> "random bytes" are a byproduct of that -- ensure that a WebSocket
> connection's "open" event is fired when the client knows the
> connection is actually open, not just when the connection is "maybe"
> open.

I'm pretty sure the extra random bytes are only to ensure a
non-WebSocket HTTP server will abort the connection, instead of
wrongly processing WebSocket data as a HTTP request.

That's a good goal, but unfortunately it prevents retrying a different
protocol (such as HTTP-based or a different Upgrade protocol), or even
a different WebSocket subprotocol, from being tried.

It doesn't help RTTs.  If anything, the extra random bytes increase
RTTs: When negotation fails, they force the client to use a new
connection for the next attempt.

They also increase RTTs on success, by preventing the pipelining of
initial client messages.

The "open" event happens when the server's negotiation response is
received at the client.  The extra random bytes don't assist that in
any way, that I see.

(You may guess that I don't agree with the extra random bytes.)

> Maybe it'd be good to rethink how the entire thing works. So far,
> the WebSocket handshake itself has been "baked into" whatever
> previous authentication there is/has been. So... Make a proper WS
> handshake. It can be asynchronous (a la SPDY), and thus not require
> an additional RTT. Allow WS data to be sent from the API before open
> is fired, at the risk of being lost. The current API always risks
> data being lost anyway, unless some ack protocol is introduced, so
> this is OK in my view. Fire open after the WS handshake
> finishes. There's no speed loss for expert programmers who desire
> the extra ms boost, while the contract of an established WS
> connection is preserved for amateurs.

All good ideas, imho :-)

Using a "proper WS" handshake was proposed recently by Greg.  Sending
things asynchronously during negotation was proposed by me; and
therefore also allowing send before the API's open completes.

Maybe we need an issue tracker of some kind to focus these ideas! :-)

-- Jamie