upvote
It's mostly the property of servers and clients that you interoperate with that don't speak H/2. There are other situations too like if you run a CDN and you're doing sendfile with kernel TLS, you can do stuff like the below

  sock.write('HTTP/1.1 200 OK\r\ncontent-length: ' + f.size() + '\r\n\r\n')
  sendfile(sock, f)
which wouldn't work with H2/H3. WebSockets are still in practice H/1 only (spec exists but is disabled in browsers). Another aspect is that if you're simply using HTTP as a preamble to 1 large (bidi) pipe, the extra framing and flow control of H/2 is just a performance handicap.
reply
If you don't need SSL you can't use HTTP/2 or HTTP/3. It doesn't make sense for externally facing services but sometimes is ok or even unavoidable for local networks
reply
You can use HTTP/2 without encryption - it's called `h2c`. It's not technically standards-compliant and browsers don't support it, but it's used a lot for proxy-to-backend communication where traffic goes over localhost and/or over an internal private network.
reply
deleted
reply
believe it or not but Cloudfront only supports HTTP/1 to origin. Some other CDNs as well.
reply
You’re requesting from a third party backend you don’t control?
reply
imo, it's obvious for people writing ajax-y web apps, but backend devs need convincing.
reply