Notes on: Married to HTTP/3

#

At #SmashingConf San Francisco, Robin Marx gave a presentation about HTTP/3. Here are my notes.

  • HTTP/3 work started in 2012 with Google working on QUIC, adopted by IETF in 2017, RFC’s published in June 2022
  • All major browsers support thanks to iOS starting with version 16

What and Why?

  • HTTP/3 builds on top of UDP, not TCP
  • UDP often blocked as it is frequently used in attacks
  • The TLS + QUIC layer makes UDP safer to use, but a lot of networks will likely still block for awhile
  • HTTP/3 brings faster connection setup, better header compression, stream prioritization, packet loss handlnig, tunable congestion control, connection migration
  • Establishing a connection in HTTP/2 requires 3 RTT (round-trip times)
  • Establishing a connection in HTTP/3 only requires 2 RTT
  • HTTP/3 introduces 0 RTT mode which can reduce the total round trip to 1
  • In general, HTTP/3 is 1 to 2 RTTs faster than HTTP/2

Adapting pages to HTTP/3

  • Fewer domains: consolidate on 1-3 conenctions
  • Less bundling: 10-40 files is sufficient
  • Help the browser: async, defer, preload, preconnect, priority hints, lazy loading
  • No server push! Use 103 Early Hints instead

Setting up HTTP/3

  • Easy way to setup HTTP/3: All major CDN’s provide HTTP/3, often with the flip of a switch.
  • Scalemates.com flipped the switch to enable HTTP/3 and almost immediately HTTP/3 traffic rose to ~13% of all requests on the landing page, ~49% for all pages in total
  • The RSVP problem: HTTP/3 might be blocked on the network or may not be enabled on the server. So the browser will only try HTTP/3 if it’s certain the server supports it.
  • For a new domain, the browser connects using H/1 or H/2. The server sends back an “alternative services” header indicating H/3 support. The browser stores alt-svc info in alt-svc cache. From then on, the browser tries HTTP/3 in parallel with HTTP/1 and 2 so that there’s an immediate fallback if the network blocks.
  • Setting up HTTP/3 on your own is much harder and server support is still improving

Testing the Performance of HTTP/3

  • To check if HTTP/3 is supported, use either HTTP3Check.net or curl.
  • Browser devtools will also show you which protocol is being used for a given request.
  • Lighthouse and browser devtools are excellent tools, but not for network protocol throttling.
  • WebPageTest uses a built-in network throttling suite which provides much more realistic network throttling.
  • Because of the alt-svc process, testing to compare HTTP/2 and HTTP/3 is tricky.
  • A lot of browsers will start switching to the new HTTP/3 connection during page load
  • In WebPageTest, you can pass custom command-line commands to enable or disable quic for Chromium based brosers
  • Connection view is still a little buggy in HTTP/3, with SSL sometimes missing.
  • However, WebPageTest provides low-level packet trace and network logs that can surface exactly what is happening.

Unexpected Results

  • Protocol performance is rarely low0hanging fruit. You need a relatively optimized page to see impact, and even then it’s mainly going to benefit your 90th percentile and up.
  • Google Search with QUIC: p90 went down 6% on desktop, 5% on mobile. p99 went down 16% on desktop, 14% on mobile.
  • Wix saw TTFB (Time to First Byte) in India get 47.5% faster at p75, and 55% faster in Philippines.
  • Digging in though, TTFB metric was heaviliy influenced by the HTTP/2 connections including a DNS lookup and the HTTP/3 connections not including the DNS lookup.
  • Better than TTFB is to look at connection time (“honest TTFB”). Updating still saw improvements of ~30% faster at p75.
  • Wix also saw a 21% improvement in LCP (Largest Contentful Paint) at p75 on mobile
  • Microsoft found similar with Outlook: p90 saw a 30% faster “honest TTFB” and up to 64% faster at the p99.99
  • LoveHolidays saw a 18% faster TTFB at p75 when using HTTP/3 versus HTTP/2, but only 2% faster LCP.

Summary

  • Know what the feature actually does. A deeper understanding is always helpful.
  • Use a CDN
  • Understand the limitations of your tools
  • Hypothesize first, and always confirm with data