http/2: Mécanisme de négociation http2 vs http1.1 dans un GET https
Je tente de comprendre comment mon Firefox annonce aux serveurs web qu'il est compatible http/2 et malgré mes recherches sur le "negotiation mechanism http2", je n'ai pas trouvé la réponse.
Voici le get envoyé sur le site
https://ipv4.lafibre.info (première visite pour ce navigateur, donc il ne sait pas si le serveur derrière est http/2 ou non)
GET / HTTP/1.1
Host: ipv4.lafibre.info
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: lafibreinfo=a%3A4%3A%7Bi%3A0%3Bs%3A3%3A%22306%22%3Bi%3A1%3Bs%3A40%3A%226f9fbaa04677220421397f9fecba31e76fd5bd2f%22%3Bi%3A2%3Bi%3A1644089568%3Bi%3A3%3Bi%3A1%3B%7D
Connection: keep-alive
Pourquoi il part sur du HTTP 1.1 alors que le client supporte HTTP/2 ?
Pourtant si le serveur en face sait faire du HTTP 2.0, Firefox part sur une requête HTTP 2.0 (car le serveur web de
https://ipv4.lafibre.info ne supporte pas encore http/2 mais mon Firefox ne le sait pas encore)
J'ai pensé à des info qui indiquent la prise en charge du 2.0, mais dans "Accept-Encoding", gzip, deflate et br (Brotli) sont des algorithmes de compression (Brotli a été ajouté dans Firefox 44 et Firefox est le premier navigateur à le supporter, Chrome va suivre quelques semaines plus tard)
Bref, si vous avez compris comment se passe la négociation de la version de http, je suis preneur (n'oubliez pas que http/2 n'est utilisable que sur des connexions https)
Schéma pour expliquer les gains de HTTP/2 Push Server vs HTTP/2 vs HTTP/1.1 :
Autre schéma réalisé par CloudFlare :