How does a browser know if a site supports HTTP/2?

fengsp picture fengsp · May 12, 2016 · Viewed 7k times · Source

If I type out https://http2.golang.org/ the chrome browser will automatically send the HTTP/2 request. How is this done?

Answer

Ryan Lyu picture Ryan Lyu · Aug 2, 2018

Take stackoverflow for example, when the browser sends a request to stackoverflow.com, it has to do the following steps:

  1. DNS lookup. find the ip address of stackoverflow.
  2. TCP/IP handshake
  3. TLS handshake.
  4. HTTP request/response (Application Protocol).
  5. ....

TLS handshake

Regarding step3 TLS handshake, there is an nice explanation by @Oleg.

In order to inspect the detail of TCP/IP packet, You may need use some tools to capture packets. e.g. Wireshark.

Client sends ClientHello to server, which carries several things

  • supported cipher suite. which cipher suites do you like?
  • supported TLS version.
  • a random number.
  • the supported Application Protocols. e.g. HTTP/2, HTTP 1.1/ Spdy/..
  • ...

Client Hello

Server responds SeverHello, which carries

enter image description here

Conclusion

HTTP2 request/response happens in step4. Before that, browser has already know whether sever support HTTP/2 through TLS handshake.