Fun fact: in HTTP/2 civilization there are two established ways to negotiate a connection over unencrypted TCP
you either just blindly assume that HTTP/2 is supported and send the connection preface (which looks like a fucked up HTTP request)
OR
you send whatever request you intended to send using HTTP/1.1 rather than HTTP/2, but add a Connection: Upgrade, HTTP2-Settings and HTTP2-Settings: headers to the request; the HTTP/2 server is then supposed to respond with a HTTP 101 status and continue further communication over HTTP/2
the initial HTTP/1.1 request still needs to be properly responded to, but the response becomes a HTTP/2 stream, meaning multiple versions of the protocol are used to service the same request ! fun