Re: [hybi] New Version Notification for draft-mcmanus-httpbis-h2-websockets-00.txt

On 10/16/2017 12:15 PM, Martin Thomson wrote:
> On Mon, Oct 16, 2017 at 3:06 PM, Andy Green <andy@warmcat.com> wrote:
>> What you are saying will save time I already assume is "for free" since it
>> happens during the time the HTML is fetched.
> 
> Assuming that you need to some HTML, that will take a round trip, but
> that is concurrent with learning that the server supports websockets.
> After that, you should be able to CONNECT and send any frames at the
> same time:
> 
> C: SETTINGS
> C: GET /index.html
> S: SETTINGS  <-- I support :protocol
> S: 200 + DATA
> C: CONNECT + ws hs + DATA <-- client's first WS frames

Well, you can't pipeline all those.  The way ws works the client 
proposes one or more protocols and extensions.  The server looks at what 
was sent and picks one protocol and zero or more extensions...

> S: 200 + ws hs + DATA <-- server's first WS frames

...only after receiving the server's decision in the final ws hs 
headers, can the client send any ws data, because until then he doesn't 
know the disposition of the ws subprotocol or extensions for the stream.

You can probably pipeline the CONNECT + ws handshake though, Patrick 
shows them sequentially and I didn't think about it myself.

> Still only two round trips.

  - SETTINGS                      - SETTINGS
  - GET /index.html
                  - 200 HEADERS + DATA

  - :method CONNECT
  - DATA ws handshake
                   - 200 HEADERS
                   - DATA ws handshake final
    - DATA...

  - DATA ...             - DATA...

With the part of the pipelining that is legal for ws, two round trips 
before the client can start to send data and 1.5 before the server can 
send data... if it's true then you're right it's not so bad.

> Were you concerned that the client needs to learn that the server
> supports websockets and not just :protocol?

No I just followed Patrick's sequencing; he shows them serialized.  But 
you're right at least the CONNECT + ws handshake can probably be pipelined.

That's also going to be a variation from normal h2 HEADERS flow if I 
understood it, on one stream there will be END_HEADERs coming twice (for 
the CONNECT and the ws handshake separately)

Anyway you are right, it makes any difference with PUSH_PROMISE probably 
not worth the effort.

-Andy

Received on Monday, 16 October 2017 04:44:55 UTC