SETTINGS_WEBSOCKET_CAPABLE | Re: WebSocket2

Kari Hurtta <hurtta-ietf@elmme-mailer.org> Wed, 05 October 2016 07:07 UTC

Return-Path: <ietf-http-wg-request+bounce-httpbisa-archive-bis2juki=lists.ie@listhub.w3.org>
X-Original-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Delivered-To: ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 2719C12953F for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Wed, 5 Oct 2016 00:07:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -9.917
X-Spam-Level:
X-Spam-Status: No, score=-9.917 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.001, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-2.996, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
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 yDgWgcRCLLnq for <ietfarch-httpbisa-archive-bis2Juki@ietfa.amsl.com>; Wed, 5 Oct 2016 00:07:48 -0700 (PDT)
Received: from frink.w3.org (frink.w3.org [128.30.52.56]) (using TLSv1.2 with cipher DHE-RSA-AES128-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 9265A1294B7 for <httpbisa-archive-bis2Juki@lists.ietf.org>; Wed, 5 Oct 2016 00:07:48 -0700 (PDT)
Received: from lists by frink.w3.org with local (Exim 4.80) (envelope-from <ietf-http-wg-request@listhub.w3.org>) id 1brgEw-000145-G6 for ietf-http-wg-dist@listhub.w3.org; Wed, 05 Oct 2016 07:03:42 +0000
Resent-Date: Wed, 05 Oct 2016 07:03:42 +0000
Resent-Message-Id: <E1brgEw-000145-G6@frink.w3.org>
Received: from lisa.w3.org ([128.30.52.41]) by frink.w3.org with esmtps (TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.80) (envelope-from <hurtta@siilo.fmi.fi>) id 1brgEu-00013R-Uz for ietf-http-wg@listhub.w3.org; Wed, 05 Oct 2016 07:03:40 +0000
Received: from smtpvgate.fmi.fi ([193.166.223.36]) by lisa.w3.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from <hurtta@siilo.fmi.fi>) id 1brgEq-0000fy-RE for ietf-http-wg@w3.org; Wed, 05 Oct 2016 07:03:40 +0000
Received: from virkku.fmi.fi (virkku.fmi.fi [193.166.211.54]) (envelope-from hurtta@siilo.fmi.fi) by smtpVgate.fmi.fi (8.13.8/8.13.8/smtpgate-20160114/smtpVgate) with ESMTP id u95733Di024901 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 5 Oct 2016 10:03:03 +0300
Received: from shell.siilo.fmi.fi by virkku.fmi.fi with ESMTP id u95733KO017301 ; Wed, 5 Oct 2016 10:03:03 +0300
Received: from shell.siilo.fmi.fi ([127.0.0.1]) by shell.siilo.fmi.fi with ESMTP id u95733Dk018194 ; Wed, 5 Oct 2016 10:03:03 +0300
Received: by shell.siilo.fmi.fi id u95732mX018193; Wed, 5 Oct 2016 10:03:02 +0300
Message-Id: <201610050703.u95732mX018193@shell.siilo.fmi.fi>
In-Reply-To: <CAH9hSJY40AnYE1JTuc1aYFzRtaT-+PwX8M7YeVj2cbosCfD0TQ@mail.gmail.com>
References: <CAG-EYChPJpAzoEuNwY3cNz503d0FRbNnDx_9AsNsZyfb5nmN0g@mail.gmail.com> <20161002080030.5F328160CC@welho-filter4.welho.com> <20161002101548.GA9450@LK-Perkele-V2.elisa-laajakaista.fi> <201610021110.u92BAWpi019029@shell.siilo.fmi.fi> <20161002124346.GB9450@LK-Perkele-V2.elisa-laajakaista.fi> <201610021340.u92DeBBL029907@shell.siilo.fmi.fi> <20161002171905.GA10108@LK-Perkele-V2.elisa-laajakaista.fi> <201610030440.u934e3kL031002@shell.siilo.fmi.fi> <CAG-EYCgEs1oSdLeLVwd12ECaL=+3pzytuy89xFWvvKCEY8fi4g@mail.gmail.com> <CAH9hSJaMsKaoTK+kr2X_GP_T7=jcDQtFLSusYrV+nDWCadcyxg@mail.gmail.com> <201610041520.u94FK6vV008976@shell.siilo.fmi.fi> <CAH9hSJY40AnYE1JTuc1aYFzRtaT-+PwX8M7YeVj2cbosCfD0TQ@mail.gmail.com>
To: Takeshi Yoshino <tyoshino@google.com>
Date: Wed, 05 Oct 2016 10:03:02 +0300
Sender: hurtta@siilo.fmi.fi
From: Kari Hurtta <hurtta-ietf@elmme-mailer.org>
CC: Kari Hurtta <hurtta-ietf@elmme-mailer.org>, Van Catha <vans554@gmail.com>, Ilari Liusvaara <ilariliusvaara@welho.com>, HTTP working group mailing list <ietf-http-wg@w3.org>
X-Mailer: ELM [version ME+ 2.5 PLalpha41]
MIME-Version: 1.0
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset="UTF-8"
X-Filter: smtpVgate.fmi.fi: 3 received headers rewritten with id 20161005/25297/01
X-Filter: smtpVgate.fmi.fi: ID 25297/01, 1 parts scanned for known viruses
X-Filter: virkku.fmi.fi: ID 13288/01, 1 parts scanned for known viruses
X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-3.0 (smtpVgate.fmi.fi [193.166.223.36]); Wed, 05 Oct 2016 10:03:03 +0300 (EEST)
Received-SPF: none client-ip=193.166.223.36; envelope-from=hurtta@siilo.fmi.fi; helo=smtpVgate.fmi.fi
X-W3C-Hub-Spam-Status: No, score=-6.7
X-W3C-Hub-Spam-Report: AWL=-0.181, BAYES_00=-1.9, RCVD_IN_DNSWL_NONE=-0.0001, RP_MATCHES_RCVD=-2.64, W3C_AA=-1, W3C_WL=-1
X-W3C-Scan-Sig: lisa.w3.org 1brgEq-0000fy-RE 46f87f969da4c58643dd15060a851869
X-Original-To: ietf-http-wg@w3.org
Subject: SETTINGS_WEBSOCKET_CAPABLE | Re: WebSocket2
Archived-At: <http://www.w3.org/mid/201610050703.u95732mX018193@shell.siilo.fmi.fi>
Resent-From: ietf-http-wg@w3.org
X-Mailing-List: <ietf-http-wg@w3.org> archive/latest/32479
X-Loop: ietf-http-wg@w3.org
Resent-Sender: ietf-http-wg-request@w3.org
Precedence: list
List-Id: <ietf-http-wg.w3.org>
List-Help: <http://www.w3.org/Mail/>
List-Post: <mailto:ietf-http-wg@w3.org>
List-Unsubscribe: <mailto:ietf-http-wg-request@w3.org?subject=unsubscribe>

Takeshi Yoshino <tyoshino@google.com>: (Wed Oct  5 08:28:23 2016)
> Hi Kari,
> 
> I just remembered that you gave some feedback to Yutaka's proposal in 2014.
> Thanks.
> 
> On Wed, Oct 5, 2016 at 12:20 AM, Kari Hurtta <hurtta-ietf@elmme-mailer.org>
> wrote:
> 
> <snip>
> 
> 
> > I contemplated SETTINGS as:
> >
> > ∙ SETTINGS frame with SETTINGS_WEBSOCKET_CAPABLE = 1
> >   from HTTP/2 server ⇒  HTTP/1 client direction
> >
> >   ∘ Promises that HTTP/2 server checks ":scheme"
> >     (and specially "wss" and "ws")
> >
> >   ∘ Acknowledges that DATA frames for
> >     ":scheme" = "wss" and "ws" are handled
> >     as bidirectional traffic (similar than
> >     ":method" = "CONNECT").
> >
> >     In other words these DATA drames do
> >     NOT form HTTP request body from client
> >     and DATA drames do not form
> >     HTTP response body from server
> >     (on cases ":scheme" = "wss" and "ws").

Quote from WiSH ( https://github.com/bidiweb/wish/blob/master/draft-yoshino-wish-00.txt )
gives more backgroud:

|   responses.  Since proxies may buffer response body, communication
|   over WiSH may experience extra latency compared to WebSocket.  When
|   HTTPS is used, response buffering by proxies is less likely an issue.

Even when proxy does not cache ":scheme" or ":method",
it may buffer assumed HTTP request or response body.

Idelly DATA frames for ":scheme" = "wss" and "ws" want to
be sent immediately when underline protocol stack is empty
(TCP window have space, TCP/Sockect write buffers are empty,
 possible TLS write buffers are empty) and HTTP/2 flow
control windows for that sream have space and HTTP/2
priority tree say that that stream is correct for writing.

( same apply for ":method" = "CONNECT" )

> >   ∘ SETTINGS_WEBSOCKET_CAPABLE = 1 does
> >     not promise that HTTP/2 server
> >     accepts ":scheme" = "wss" or "ws".
> >
> 
> Yutaka's proposal tried to represent the same guarantee by using the
> combination of the client to server direction SETTINGS and the response
> status code.
> 
> I chatted with Yutaka offline. He don't remember the background fully, but
> we guess we chose to let the client send SETTINGS because we want to start
> sending WebSocket handshake before waiting for response from the server to
> reduce the initial latency. Such an attempt may result in failure, but
> worth doing for some latency sensitive applications.
> 
> There're two approaches to realize this:
> (a) let the server send SETTINGS and let the client send handshake
> speculatively without waiting for the SETTINGS
> (b) let the client send SETTINGS and then send handshake speculatively, and
> let the server determine the response status code based on whether or not
> it has received SETTINGS as specified in Yutaka's I-D.
> 
> (a) still gives the client path check result before receiving the WebSocket
> handshake response, but it's not good that the server cannot know whether
> the path was good or not before accepting the WebSocket handshake.

yet one more possibility:

It is also possible that HTTP/2 server sets SETTINGS_WEBSOCKET_CAPABLE = 1
on initial SETTINGS which is part of server greeting.  This add little
overhead on case where client does not use websockect2. 

Origin server need send that only of there at least one websocket service 
configured.

HTTP/2 server which is HTTP/2 proxy may need set SETTINGS_WEBSOCKET_CAPABLE = 1 
on initial SETTINGS always when it supports ":scheme" = "wss" or "ws".


<removed>


> > > :scheme is needed, yes.
> > >
> > > Not sure about need for "sec-ws2-ack". For WebSocket/TCP, we employed the
> > > Sec-WebSocket-Key/Accept challenge/response in order to prevent the
> > > WebSocket protocol from being abused for cross protocol attacks e.g.
> > SMTP.
> > > If all the intermediaries and servers correctly investigate the :scheme
> > > header and don't get confused, "sec-ws2-ack" is unnecessary. Regarding
> > > ws/h2-RFC6455 bridging, a correctly implemented intermediary facing ws/h2
> > > capable node and ws/h2 non-capable node would just perform RFC 6455
> > > handshake as Kari suggested. So, no problem.
> >
> > Ilari Liusvaara suggested sec-ws2-ack for check that
> > ":scheme" is not ignored (if I remember correctly).
> >
> 
> Yeah. I understood so and therefore I said "If all the intermediaries and
> servers correctly investigate the :scheme header and don't get confused,".
> 
> <snip>

On another context Mike Bishop wrte ( 
https://lists.w3.org/Archives/Public/ietf-http-wg/2016OctDec/0037.html )

¤ Should we just define SETTINGS_MIXED_SCHEME_PERMITTED and call it a day?

I realize that ":scheme" = "wss" or "ws" sent on same HTTP/2 connection
than what is used for ":scheme" = "https", is also just one case of
for mixed scheme.

I wrote ( https://lists.w3.org/Archives/Public/ietf-http-wg/2016OctDec/0044.html )

| connection apply probably for several origins. TLS connection
| may be terminated by reverse proxy. And different origins
| are served by different processes or servers behind of
| reverse proxy.
| 
| I guess that SETTINGS_MIXED_SCHEME_PERMITTED is too wide.


This may apply also for SETTINGS_WEBSOCKET_CAPABLE. However confusing
between ":scheme" = "http" and "https" is more dangerous than between
:scheme" = "wss" and "https".

/ Kari Hurtta