On 06/19/2014 12:51 AM, Yutaka Hirano wrote:
> I don't want to require all intermediaries to understand WS over HTTP/2.
> With END_SEGMENT, intermediaries only have to transfer the data
> without understanding WS over HTTP/2.
Both options require changes. Even if the intermediary doesn't
understand WS, normal day-to-day HTTP/1.1 APIs would have to change to
accommodate segments. In my mind, that is nearly the same as requiring
the proxy to understand WS.
>
> If we don't have END_SEGMENT, we have to specify WS_END_SEGMENT in
> WS_DATA frame type
> which are specific to WS over HTTP/2 and all intermediaries have to
> understand WS over HTTP/2.
>
> I have one question:
> Suppose we have WS_END_SEGMENT and WS_DATA.
> Suppose there is an intermediary that doesn't support WS over HTTP/2.
> The intermediary ignores the SETTINGS values specific to WS over
> HTTP/2, so the handshake succeeds.
> The intermediary discards the frames specific to WS over HTTP/2, so
> two endpoints can't communicate
> whereas the handshake succeeds.
> Is that right?
>
I think it would be worth noting in the spec how SETTING negotiation
works. There's some text in 5.5 already, but perhaps we could be a bit
more explicit. Here's how I think it can work:
* Extension negotiation happens only during the initial SETTINGS frame
exchange
* A negotiated extension is active if
1) A SETTINGS frame with the extension setting enabled has been sent
2) A SETTINGS frame with the extension setting enabled has been
received
3) A SETTINGS frame with the ack flag has been sent
Negotiated settings should take effect for all sent frames after step
#3. An HTTP/2 endpoint should be prepared to receive extension frames
after step #2.
This might be more strict than necessary, but it prevents the situation
of one side believing the extension is ON and the other thinks it is OFF.