You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I would like to add an implementation of h2c into x/net/http2/h2c.
The proposed implementation strategy is to implement h2c by leveraging the existing http2.Server by implementing the 2 ways to start an h2c connection as described in RFC 7540, which are: (1)
create a connection starting with HTTP/1 and then upgrading to h2c [Section 3.2] and (2) starting a connection directly speaking h2c (aka starting with prior knowledge) [Section 3.4].
For both of the above connection methods the implementation strategy is to hijack a HTTP/1 connection, perform the h2c connection on the hijacked net.Conn, and create a suitably configured net.Conn to pass into http2.Server.ServeConn.
For h2c with prior knowledge this is relatively simple. For that we just have to verify the HTTP/2 client preface has been written to the net.Conn, and then reforward the client preface to the hijacked connection.
For h2c upgraded from HTTP/1, this is a bit more involved. First we validate the HTTP/1 Upgrade request, and respond to the client with 101 Switching Protocols. Then we write a HTTP/2 client preface on behalf of the client, and a settings frame and a headers frame which correspond to what was in
the upgrade request. Then since http2.Server is going respond with a settings ACK, we swallow it so that it is not forwarded to the client since for h2c upgrade from HTTP/1 the 101 Switching Protocols response replaces the settings ACK.
I have a working example of this strategy submitted to gerrit as: 112997
The code I have will obviously need some work before submission, but I think I am far enough that I would like to start the conversation on what the next steps should be. (This is my first time trying to contribute, so I'm a little confused what the process is. I am under the impression that I should get some feedback on my proposal before trying to produce the final solution.)
The text was updated successfully, but these errors were encountered:
I would like to add an implementation of h2c into x/net/http2/h2c.
The proposed implementation strategy is to implement h2c by leveraging the existing http2.Server by implementing the 2 ways to start an h2c connection as described in RFC 7540, which are: (1)
create a connection starting with HTTP/1 and then upgrading to h2c [Section 3.2] and (2) starting a connection directly speaking h2c (aka starting with prior knowledge) [Section 3.4].
For both of the above connection methods the implementation strategy is to hijack a HTTP/1 connection, perform the h2c connection on the hijacked net.Conn, and create a suitably configured net.Conn to pass into http2.Server.ServeConn.
For h2c with prior knowledge this is relatively simple. For that we just have to verify the HTTP/2 client preface has been written to the net.Conn, and then reforward the client preface to the hijacked connection.
For h2c upgraded from HTTP/1, this is a bit more involved. First we validate the HTTP/1 Upgrade request, and respond to the client with 101 Switching Protocols. Then we write a HTTP/2 client preface on behalf of the client, and a settings frame and a headers frame which correspond to what was in
the upgrade request. Then since http2.Server is going respond with a settings ACK, we swallow it so that it is not forwarded to the client since for h2c upgrade from HTTP/1 the 101 Switching Protocols response replaces the settings ACK.
I have a working example of this strategy submitted to gerrit as: 112997
The code I have will obviously need some work before submission, but I think I am far enough that I would like to start the conversation on what the next steps should be. (This is my first time trying to contribute, so I'm a little confused what the process is. I am under the impression that I should get some feedback on my proposal before trying to produce the final solution.)
The text was updated successfully, but these errors were encountered: