Re: [hybi] Is it important to know frame length at the start of frame? (was: Re: Discontinuation of mux ...)

Micheil Smith <micheil@brandedcode.com> Wed, 12 February 2014 13:34 UTC

Return-Path: <micheil@brandedcode.com>
X-Original-To: hybi@ietfa.amsl.com
Delivered-To: hybi@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id A15991A0979 for <hybi@ietfa.amsl.com>; Wed, 12 Feb 2014 05:34:26 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.6
X-Spam-Level:
X-Spam-Status: No, score=-2.6 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id vDQSo9LiNoA7 for <hybi@ietfa.amsl.com>; Wed, 12 Feb 2014 05:34:23 -0800 (PST)
Received: from mail-we0-f175.google.com (mail-we0-f175.google.com [74.125.82.175]) by ietfa.amsl.com (Postfix) with ESMTP id 0B8D21A098F for <hybi@ietf.org>; Wed, 12 Feb 2014 05:34:19 -0800 (PST)
Received: by mail-we0-f175.google.com with SMTP id q59so5839693wes.6 for <hybi@ietf.org>; Wed, 12 Feb 2014 05:34:18 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:content-type:mime-version:subject:from :in-reply-to:date:content-transfer-encoding:message-id:references:to; bh=pYyQYhQ23wgNSViK3MioDrHAV1tlBwyxajiCoVApPvI=; b=KKZ7tc+slEO3F4oxXeiFl9QCGSm4zEEQHVCQRaToxFgTdf0WvqJO9bHizDiRHDjyto QLX9xuIsBYMLpmmAj71ha05v6q77aD8sK2eFRWSTjPnybtjOlBD+JjAgxOOiVngWZ9aw a5ok760tX/KQDm1zYbHobjeJGvGyvJpE4bmQvCB9udfZouojBaHNZpr5B2JbLdyDNFkm kq3HYPJsjS8bHHTWRS9PKx+PPL2GXKVm3LMgSCbdVNxxJ7BAEztF49ja63Krr7HiwELl n4TtfB6PHkWXinu7GWhwGbY9YQc4U3pCvG1BDWBuWADXJt4Y2v36DUkTFFPS3BhTMT7t lhlA==
X-Gm-Message-State: ALoCoQnTtgGqPCVIUqyMWrGMuPqzH+M31oeciIJuLDlnvx1CGJCr8uEk+WTDiUhOe6RsFgw0NSL1
X-Received: by 10.180.211.208 with SMTP id ne16mr1937560wic.21.1392212058595; Wed, 12 Feb 2014 05:34:18 -0800 (PST)
Received: from [10.0.1.75] (host-92-24-111-81.ppp.as43234.net. [92.24.111.81]) by mx.google.com with ESMTPSA id ju6sm52161512wjc.1.2014.02.12.05.34.17 for <multiple recipients> (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 12 Feb 2014 05:34:17 -0800 (PST)
Content-Type: text/plain; charset="windows-1252"
Mime-Version: 1.0 (Mac OS X Mail 7.0 \(1822\))
From: Micheil Smith <micheil@brandedcode.com>
In-Reply-To: <CAH9hSJbf_ABT7ECL9eS=_ADrncX8qBtxZv=uLcdu9_6GUv23Uw@mail.gmail.com>
Date: Wed, 12 Feb 2014 13:34:15 +0000
Content-Transfer-Encoding: quoted-printable
Message-Id: <8984EA8D-C6ED-49BF-92C4-113D69121B30@brandedcode.com>
References: <CAH9hSJbf_ABT7ECL9eS=_ADrncX8qBtxZv=uLcdu9_6GUv23Uw@mail.gmail.com>
To: "hybi@ietf.org" <hybi@ietf.org>
X-Mailer: Apple Mail (2.1822)
Subject: Re: [hybi] Is it important to know frame length at the start of frame? (was: Re: Discontinuation of mux ...)
X-BeenThere: hybi@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Server-Initiated HTTP <hybi.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/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: Wed, 12 Feb 2014 13:34:26 -0000

As far as I recall, this was also to enable more efficient reading and error checking. 
Prefixing with the frame size means you don’t need to scan every byte being 
received in order to find an end of frame delimiter.

This is a particularly useful thing when doing something like upstreaming on a
websocket server, where all you care about is the very start of the message, 
and the length, such that you can then just read() N bytes which is the size of 
your frame and just write() directly.

In other words, I agree on your reply Takeshi.

– Micheil

On 7 Feb 2014, at 7:30 am, Takeshi Yoshino <tyoshino@google.com> wrote:

> I remember that in early days of the standardization, somebody was proposing (*) that we should have a message length field in the first fragment to allow for allocating buffer for full message at the beginning.
> 
> On Thu, Jan 16, 2014 at 3:27 PM, "Martin J. Dürst" <duerst@it.aoyama.ac.jp> wrote:
> On 2014/01/16 15:05, Yutaka Hirano wrote:
> Hi Joakim,
> 
> Thanks for the comment.
> 
> Knowing the size of a frame at the start of the frame, traditional
> websocket behavior, is desired, as it allows us to fast fail for the 1009
> (message too big) use case.
> 
> Do you know how effective it is?
> 
> Having no prior knowledge of frame size is undesirable to us.
> 
> On the other hand, the frame sender have more freedom because they don't
> have to know the size of the frame in front.
> 
> My understanding of why messages are split into frames was that this would allow to start a message without knowing its length. But if you don't know the size of a frame before sending it, then the right solution is to make it smaller. Frames are just arbitrary pieces of a message.
> 
> We should be clear if we want to make it able to
> (a) know the length of WebSocket frame on receiving the header of each fragment
> (b) know the length of WebSocket message on receiving the first fragment
>  
> As the proposal (*) has been rejected and not in the RFC6455 header, (b) is not true even in RFC6455. What Joakim said should be to keep (a) which is true now in RFC6455.
> 
> But if a message is fragmented into smaller frames, we cannot reject (and send 1009) the message on receiving the first frame. "Whether we can fast-reject a big message on receiving some non-final frame" depends on how the peer fragments a message.
> 
> In some plans discussed in the main thread, it's planned to drop frame length info for efficiency. But something else such as the length field of HTTP/2.0 DATA frame tells how much data the fragment (when multiple DATAs convey a WebSocket frame, each DATA would be called fragments of a frame) contains. So, we won't be able to know the length of fragments (original/encapsulated WebSocket frames) on receiving each of them, but still be able to know the length of sub-fragments (e.g. HTTP/2.0 data frames).
> 
> I think this change is acceptable and shouldn't be considered as breaking of RFC6455 semantics. Even in the mux extension I was editing (http://tools.ietf.org/html/draft-ietf-hybi-websocket-multiplexing-11), I made the same change. The length of the encapsulated frame is unknown until receiving all the fragments of the encapsulating message. No one was objecting to that when we were discussing the spec, IIRC.
> 
> _______________________________________________
> hybi mailing list
> hybi@ietf.org
> https://www.ietf.org/mailman/listinfo/hybi