{"id":590,"date":"2019-09-11T19:28:33","date_gmt":"2019-09-11T17:28:33","guid":{"rendered":"https:\/\/corsaire-consulting.fr\/blog\/?p=590"},"modified":"2019-09-11T19:28:33","modified_gmt":"2019-09-11T17:28:33","slug":"http-2","status":"publish","type":"post","link":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/2019\/09\/11\/http-2\/","title":{"rendered":"HTTP\/2"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-622\" style=\"display: none !important; visibility: hidden !important; opacity: 0 !important; background-position: 0px 0px;\" src=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/firefox_http2_plugin-300x37.png\" alt=\"\" width=\"0\" height=\"0\" \/>HTTP\/2 constitue la derni\u00e8re version majeure du protocole r\u00e9seau HTTP.<\/p>\n<p>Cette nouvelle version a \u00e9t\u00e9 \u00e9labor\u00e9e sur la base du projet exp\u00e9rimental <a href=\"https:\/\/fr.wikipedia.org\/wiki\/SPDY\" target=\"_blank\" rel=\"noopener noreferrer\">SPDY<\/a> de Google et a pour objectif principal d&rsquo;am\u00e9liorer la vitesse des \u00e9changes de ressources sur le World Wide Web : Pages HTML, scripts Javascript, feuilles de styles, images, etc&#8230;<\/p>\n<p>Pour m\u00e9moire, HTTP 1.0 date de 1995 et la <a href=\"https:\/\/www.ietf.org\/rfc\/rfc2068.txt\" target=\"_blank\" rel=\"noopener noreferrer\">version 1.1<\/a> de 1997. La <a href=\"https:\/\/www.ietf.org\/rfc\/rfc2616.txt\" target=\"_blank\" rel=\"noopener noreferrer\">derni\u00e8re mise \u00e0 jour<\/a> a \u00e9t\u00e9 publi\u00e9e en 1999.<\/p>\n<p>La sp\u00e9cification HTTP\/2 a \u00e9t\u00e9 publi\u00e9e le 15 mai 2015 sous la <a href=\"https:\/\/tools.ietf.org\/html\/rfc7540\" target=\"_blank\" rel=\"noopener noreferrer\">RFC 75401<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-637 aligncenter\" src=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2-timeline-300x75.png\" alt=\"\" width=\"532\" height=\"133\" srcset=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2-timeline-300x75.png 300w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2-timeline.png 766w\" sizes=\"auto, (max-width: 532px) 100vw, 532px\" \/><\/p>\n<p><!--more--><\/p>\n<h1>Objectif<\/h1>\n<p>Le projet <a href=\"https:\/\/fr.wikipedia.org\/wiki\/SPDY\">SPDY<\/a> de Google visait \u00e0 combler les lacunes de HTTP 1.1 pour faire face \u00e0 l\u2019accroissement du nombre de requ\u00eates \u00e0 traiter et de l&rsquo;augmentation tr\u00e8s nette des \u00e9l\u00e9ments \u00e9chang\u00e9s entre clients et serveurs afin d&rsquo;\u00e9viter les engorgements et les attentes c\u00f4t\u00e9 client (Head of line blocking)<\/p>\n<p>Des palliatifs tels que l&rsquo;usage de <a href=\"https:\/\/www.w3schools.com\/Css\/css_image_sprites.asp\" target=\"_blank\" rel=\"noopener noreferrer\">sprites<\/a>, du <a href=\"https:\/\/www.keycdn.com\/support\/domain-sharding\" target=\"_blank\" rel=\"noopener noreferrer\">sharding<\/a> ou de l&rsquo;<a href=\"https:\/\/developer.sevenval.com\/docs\/versions\/14.6.11\/web-accelerator\/Image_Inlining.html\" target=\"_blank\" rel=\"noopener noreferrer\">inlining<\/a> ont permis de contourner ces lacunes souvent au prix de d\u00e9veloppements sp\u00e9cifiques.<\/p>\n<p>L&rsquo;objectif principal a donc \u00e9t\u00e9 d&rsquo;am\u00e9liorer sensiblement la vitesse des \u00e9changes entre le navigateur et le serveur.<\/p>\n<h1>Concepts et limites de HTTP\/2<\/h1>\n<p>Les fondements du protocole HTTP sont maintenus, L&rsquo;API ne change pas, seule l&rsquo;impl\u00e9mentation \u00e9volue. : Le client envoie une requ\u00eate vers le serveur en TCP. :<\/p>\n<ul>\n<li>Les URLs http:\/\/ et https:\/\/ ne doivent pas changer. HTTP\/2 sait donc g\u00e9rer les URIs actuelles. <strong>En clair, il n&rsquo;y a pas d&rsquo;URI commen\u00e7ant par http2:\/\/ ou http2s:\/\/<br \/>\n<\/strong>La bascule HTTP 1.x vers HTTP\/2 se fait \u00e0 l&rsquo;initiative du <strong>client <\/strong>s&rsquo;il supporte la version 2. Pour se faire il renvoie vers le serveur l&rsquo;en-t\u00eate \u00ab\u00a0UPGRADE\u00a0\u00bb d\u00e9j\u00e0 support\u00e9 par HTTP 1.x Si le serveur supporte HTTP\/2 il renvoie le code \u00ab\u00a0101 Switching\u00a0\u00bb et les 2 parties basculent vers HTTP\/2, cela au prix d&rsquo;un aller-retour r\u00e9seau suppl\u00e9mentaire. <strong><br \/>\n<\/strong><\/li>\n<li>Pas de nouvelles m\u00e9thodes (verbes) introduites dans le protocole<\/li>\n<li>Compatibilit\u00e9 garantie entre HTTP1 et HTTP\/2 au niveau\n<ul>\n<li>des URIs<\/li>\n<li>des m\u00e9thodes GET, POST, UPDATE&#8230;<\/li>\n<li>des codes retour 200, 401, 404, 550 qui auront toujours la m\u00eame signification<\/li>\n<li>des ent\u00eates (headers)<\/li>\n<\/ul>\n<\/li>\n<li>Maintient op\u00e9rationnel du protocole HTTP 1 pour encore plusieurs d\u00e9cennies ; une bascule HTTP 1.x vers HTTP\/2 ou HTTP \/2 vers HTTP 1.x doit \u00eatre possible, via des proxies par exemple<\/li>\n<li>Il n&rsquo;y aura pas de version mineure du protocole HTTP \/2. S&rsquo;il est n\u00e9cessaire d&rsquo;\u00e9tendre le protocole ce sera dans le cadre d&rsquo;HTTP3<\/li>\n<\/ul>\n<p>En r\u00e9sum\u00e9, les fondements du protocole HTTP restent inchang\u00e9 avec cette nouvelle version.<\/p>\n<h1>HTTP\/2 et la s\u00e9curit\u00e9<\/h1>\n<p>La sp\u00e9cification HTTP\/2 <strong>n&rsquo;impose pas<\/strong> l&rsquo;utilisation d&rsquo;un protocole s\u00e9curis\u00e9.<\/p>\n<p>Toutefois, beaucoup d&rsquo;acteurs du Web comme Mozzila ou Google souhaitent que HTTP\/2 ne soit utilis\u00e9 que conjointement avec TLS. A tel point que Firefox ou Chrome utilisent HTTP\/2 uniquement qu&rsquo;avec TLS (Idem pour Microsoft Edge) Dans le cas contraire ils basculent vers HTTP 1.1. Malgr\u00e9 les nombreux d\u00e9bats autour de ce sujet, la sp\u00e9cification finale indique qu&rsquo;en cas d&rsquo;utilisation de TLS c&rsquo;est la version 1.2 qui doit \u00eatre utilis\u00e9e au minimum avec une liste restreintes d&rsquo;algorithmes (ciphers)<\/p>\n<p>Pour information, Internet Explorer et l&rsquo;outil \u00ab\u00a0curl\u00a0\u00bb supporte HTTP\/2 en clair (sans l&rsquo;usage de TLS)<\/p>\n<p>Le protocole pour n\u00e9gocier l&rsquo;utilisation de HTTP\/2 avec un serveur TLS est ALPN <a href=\"https:\/\/en.wikipedia.org\/wiki\/Application-Layer_Protocol_Negotiation\" target=\"_blank\" rel=\"noopener noreferrer\">(Application-Layer Protocol Negociation)<\/a>. Avec ALPN, le client indique au serveur la liste des protocoles<br \/>\nainsi que ses pr\u00e9f\u00e9rences, le serveur ayant le dernier mot.<\/p>\n<p>Dans les faits, l&rsquo;usage de HTTP\/2 se fera donc conjointement avec des serveurs s\u00e9curisant leurs connexions avec TLS 1.2 au minimum. En cons\u00e9quence, les serveurs doivent impl\u00e9menter \u00e9galement le protocole ALPN.<\/p>\n<p>En compl\u00e9ment, OpenSSL supporte ALPN depuis la version 1.0.2<\/p>\n<h1>Fonctionnement<\/h1>\n<h2>Format des \u00e9changes<\/h2>\n<p>Http2 est un protocole <strong>binaire<\/strong>, contrairement \u00e0 HTTP 1.x qui est textuel donc lisible par un \u00eatre humain. L&rsquo;objectif est de faciliter le d\u00e9coupage des trames et de compresser le flux r\u00e9seau.<\/p>\n<p>Http2 envoie donc des trames binaires de diff\u00e9rents types dont le format est toujours le m\u00eame : Longueur, Type, Flags, Identifiant de Flux (Stream ID) et contenu (payload).<\/p>\n<p>Http2 d\u00e9finit dix trames diff\u00e9rentes ; 2 sont fondamentales car r\u00e9pliquent le fonctionnement HTTP<br \/>\n1.1 : DATA (donn\u00e9es ou contenu) et HEADERS (en-t\u00eate)<\/p>\n<h2>Multiplexage de flux<\/h2>\n<p>Certainement l&rsquo;\u00e9l\u00e9ment clef du gain de performance apport\u00e9 par Http\/2.<\/p>\n<div class=\"alert alert-block alert-success\">HTTP\/2 utilise 1 seule connexion multiplex\u00e9e entre le client et le serveur contrairement \u00e0 HTTP\/1 qui pouvait en ouvrir plusieurs (6 g\u00e9n\u00e9ralement par domaine) afin de r\u00e9cup\u00e9rer les diff\u00e9rentes ressources en parall\u00e8le.<\/div>\n<p>&nbsp;<\/p>\n<p><strong>Une trame (frame)<\/strong> est la plus petite unit\u00e9 de communication au sein d&rsquo;une connexion HTTP\/2 et comporte un en-t\u00eate et une s\u00e9quence d&rsquo;octets de longueur variable dont la structure correspond au type de trame.<\/p>\n<p><strong>Un flux (stream)<\/strong> est un flot <strong>bidirectionnel<\/strong> de <strong>trames<\/strong> au sein d&rsquo;une connexion HTTP\/2. La notion correspondante dans HTTP\/1 est un \u00e9change de messages de type requ\u00eate et r\u00e9ponse. Chaque flux dispose d&rsquo;un identifiant unique et peu \u00e9ventuellement porter une information relative \u00e0 sa priorit\u00e9.<\/p>\n<div class=\"alert alert-block alert-info\">HTTP\/2 peut g\u00e9rer plusieurs flux (streams) de donn\u00e9es sur la m\u00eame connexion TCP, ce qui permet d&rsquo;\u00e9viter le point de blocage classique de HTTP\/1 pour les requ\u00eates lentes, et de ne pas avoir \u00e0 ouvrir de nouvelles connexions TCP pour chaque requ\u00eate\/r\u00e9ponse (les connexions persistantes ou KeepAlive avaient contourn\u00e9 le probl\u00e8me dans HTTP\/1 mais ne l&rsquo;avaient pas enti\u00e8rement r\u00e9solu)<\/div>\n<div><\/div>\n<div><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-643 aligncenter\" src=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2_headers-300x110.png\" alt=\"\" width=\"480\" height=\"176\" srcset=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2_headers-300x110.png 300w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2_headers.png 676w\" sizes=\"auto, (max-width: 480px) 100vw, 480px\" \/><\/div>\n<p>En r\u00e9sum\u00e9, le mode requ\u00eate\/r\u00e9ponse bloquant de HTTP\/1 est caduque. Avec HTTP\/2 le client peut \u00e9mettre plusieurs requ\u00eates successivement sans attendre d&rsquo;avoir obtenu une r\u00e9ponse. De m\u00eame, le serveur peut envoyer au client les r\u00e9ponses dans un ordre diff\u00e9rent des requ\u00eates.<\/p>\n<h2>Priorit\u00e9s et d\u00e9pendances<\/h2>\n<p>HTTP\/2 pr\u00e9voit \u00e9galement la possibilit\u00e9 d&rsquo;octroyer une priorit\u00e9 \u00e0 chaque flux et de d\u00e9finir les d\u00e9pendances entre les flux. Cela permet au client d&rsquo;influer sur le serveur en pr\u00e9cisant quelles ressources sont \u00e0 renvoyer en pririt\u00e9 et dans quel ordre. L&rsquo;objectif \u00e9tant d&rsquo;am\u00e9liorer le rendu visuel des pages lors du dialogue entre le client et le serveur.<\/p>\n<h2>Gestion des ent\u00eates (headers)<\/h2>\n<p>HTTP\/2 compresse les headers au format HPACK. Il est courant d&rsquo;utiliser une compression GZIP actuellement sur les sites web mais celle-ci ne compresse pas les ent\u00eates.<\/p>\n<p>Le format de compression HPACK a \u00e9t\u00e9 sp\u00e9cialement d\u00e9velopp\u00e9 pour HTTP\/2 afin de r\u00e9pondre aux exigences de s\u00e9curit\u00e9 gr\u00e2ce \u00e0 l&rsquo;algorithme d&rsquo;encodage de Huffman ;<\/p>\n<p>&nbsp;<\/p>\n<p>HTTP\/2 optimise les flux en ne r\u00e9p\u00e9tant pas les headers inchang\u00e9s. Le client et le serveur maintiennent une table index\u00e9e des headers. Cela permet lors de requ\u00eates successives de n&rsquo;envoyer que l&rsquo;index du header d\u00e9j\u00e0 fourni ; le client\/serveur reconstruira la liste compl\u00e8te des headers en utilisant la table index\u00e9e \u00e0 sa disposition.Tr\u00e8s efficace par exemple avec les headers comme User-Agent ou Cookies.<\/p>\n<h2>Push<\/h2>\n<p>Toujours dans l&rsquo;optique d&rsquo;am\u00e9liorer le temps de chargement des pages, le serveur peut de son propre chef renvoyer des ressources vers le client avant m\u00eame qu&rsquo;il en ait fait la demande car il sait d&rsquo;avance ce que le client va lui demander. Ces ressources seront stock\u00e9es en cache c\u00f4t\u00e9 client afin d&rsquo;\u00eatre imm\u00e9diatement disponibles quand il en aura besoin.<\/p>\n<p>Concr\u00e8tement, le serveur d\u00e9clenche le \u00ab\u00a0push\u00a0\u00bb en cr\u00e9ant un nouveau flux (stream) avec une trame <span class=\"codeinline\">PUSH_PROMISE<\/span> contenant tous les headers HTTP de la ressource. A la r\u00e9ception de cette trame, le client peut accepter le push du serveur ou le refuser, par exemple si la ressource est d\u00e9j\u00e0 en cache. Dans ce cas il renvoie imm\u00e9diatement une trame RST_STREAM pour arr\u00eater le flux.<\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-646 aligncenter\" src=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2_push-300x127.png\" alt=\"\" width=\"506\" height=\"214\" srcset=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2_push-300x127.png 300w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2_push-768x326.png 768w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/http2_push.png 823w\" sizes=\"auto, (max-width: 506px) 100vw, 506px\" \/><\/p>\n<h2>Interruption des connexions<\/h2>\n<p>Avec HTTP, si un logiciel client envoie une requ\u00eate et d\u00e9cide de ne plus attendre la r\u00e9ponse, la seule fa\u00e7on de pr\u00e9serve la bande passante est de fermer la connexion TCP. Il n&rsquo;y a aucune fa\u00e7on de la r\u00e9cup\u00e9rer si cela s&rsquo;av\u00e8re n\u00e9cessaire plus tard.<\/p>\n<p>Avec HTTP\/2, un logiciel client pourra maintenir active une connexion TCP m\u00eame s&rsquo;il abandonne un \u00e9change en cours \u00e0 la suite d&rsquo;une action de l&rsquo;utilisateur (avec la trame RST_STREAM), ce qui rendra moins co\u00fbteuse en ressources r\u00e9seaux une \u00e9ventuelle reprise du dialogue ult\u00e9rieurement.<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<ul>\n<li>1 seule connexion TCP entre le client et le serveur<\/li>\n<li>Utilisation de flux (streams) pour \u00e9changer les donn\u00e9es au sein de la connexion. Un flux est\n<ul>\n<li>multiplex\u00e9<\/li>\n<li>prioris\u00e9<\/li>\n<\/ul>\n<\/li>\n<li>Nouveau format binaire d&rsquo;\u00e9change de donn\u00e9es incluant\n<ul>\n<li>un contr\u00f4le de flux<\/li>\n<li>une priorisation<\/li>\n<li>un push serveur<\/li>\n<\/ul>\n<\/li>\n<li>La compression des en-t\u00eates (hearders) via HPACK<\/li>\n<\/ul>\n<h1>Du c\u00f4t\u00e9 des navigateurs<\/h1>\n<p>La plupart des navigateurs du march\u00e9 support HTTP\/2 depuis un bon moment maintenant :<\/p>\n<figure id=\"attachment_624\" aria-describedby=\"caption-attachment-624\" style=\"width: 1024px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/caniuse.com\/#search=http2\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-624 size-large\" src=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/browser_support_http2_matrix-1024x246.png\" alt=\"Matrice de support HTTP\/2 par les principaux navigateurs du march\u00e9\" width=\"1024\" height=\"246\" srcset=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/browser_support_http2_matrix-1024x246.png 1024w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/browser_support_http2_matrix-300x72.png 300w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/browser_support_http2_matrix-768x185.png 768w, https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/browser_support_http2_matrix.png 1153w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-624\" class=\"wp-caption-text\">Matrice de support HTTP\/2 par les principaux navigateurs du march\u00e9 Source : https:\/\/caniuse.com\/#search=http2<\/figcaption><\/figure>\n<p>&nbsp;<\/p>\n<p>Mozzila Firefox et Google Chrome propose une extension qui permet de savoir si le site que vous parcourez utilise HTTP\/2 :<\/p>\n<ul>\n<li>Firefox : <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-620\" style=\"display: none !important; visibility: hidden !important; opacity: 0 !important; background-position: 0px 0px;\" src=\"https:\/\/corsaire-consulting.fr\/blog\/wp-content\/uploads\/2019\/09\/firefox_http2_plugin-300x37.png\" alt=\"\" width=\"0\" height=\"0\" \/>HTTP\/2 Indicator<\/li>\n<li>Chrome : HTTP\/2 and SPDY indicator<\/li>\n<\/ul>\n<p>Le support de HTTP\/2 est indiqu\u00e9 par un \u00e9clair bleu dans la barre sup\u00e9rieure des 2 navigateurs.<\/p>\n<h1>Du c\u00f4t\u00e9 des serveurs<\/h1>\n<p>HTTP\/2 est pris en charge dans l&rsquo;API <a href=\"https:\/\/www.jcp.org\/en\/jsr\/detail?id=369\" target=\"_blank\" rel=\"noopener noreferrer\">Servlet 4.0 (JSR 369)<\/a> de JEE 8.<\/p>\n<p>Les serveurs HTTP et serveurs d&rsquo;application Java supportant d\u00e9j\u00e0 HTTP\/2 (en date de septembre 2019) :<\/p>\n<ul>\n<li>Apache \u00e0 partir de la version 2.4.17 via le module mod_http2<\/li>\n<li>Apache Tomcat \u00e0 partir de la version 8.5<\/li>\n<li>HAProxy \u00e0 partir de la version 1.8<\/li>\n<li>Jetty \u00e0 partir de la version 9.3<\/li>\n<li>Microsoft IIS supporte HTTP\/2 avec Windows 10 and Windows Server 2016.<\/li>\n<li>nginx \u00e0 partir de la version 1.9.5 via le module ngx_http_v2_module<br \/>\nSupport du mode Push depuis la version 1.13.9<\/li>\n<li>Wildfly \u00e0 partir de la version 9<\/li>\n<\/ul>\n<h1>Conclusion<\/h1>\n<p>HTTP\/2 apporte son lot d&rsquo;\u00e9volutions \u00e0 un protocole vieillissant et plus trop adapt\u00e9 au web moderne. Les gains de performance esp\u00e9r\u00e9s par le multiplexage et le format binaire des \u00e9changes sont \u00e0 relativiser avec l&rsquo;utilisation de TLS rendue obligatoire par les principaux navigateurs du march\u00e9. Sa mise en application rend obsol\u00e8te, voire contre-productive, certaines optimisations utilis\u00e9es avec HTTP 1.x telles que le Sharding, l&rsquo;inlining, etc&#8230; Comment faire quand un site web doit adresser des clients HTTP 1.x et HTTP\/2 s&rsquo;il veut en tirer le meilleur parti ?<\/p>\n<p>Oracle WebLogic Server est le grand absent des serveurs d&rsquo;application Java supportant HTTP\/2 mais gageons que cette situation n&rsquo;est que temporaire et sera r\u00e9gl\u00e9e avec la prochaine version 12.2.1.4<\/p>\n<p>HTTP\/2 n&rsquo;est pas encore d\u00e9ploy\u00e9 partout mais la suite est d\u00e9j\u00e0 en pr\u00e9paration chez Google avec <a href=\"https:\/\/en.wikipedia.org\/wiki\/QUIC\" target=\"_blank\" rel=\"noopener noreferrer\">QUIC<\/a>.<\/p>\n<h1>Sources et r\u00e9f\u00e9rences<\/h1>\n<p>Les pages suivantes ont \u00e9t\u00e9 utilis\u00e9es pour r\u00e9diger cet article :<\/p>\n<ul>\n<li><a href=\"https:\/\/httpd.apache.org\/docs\/2.4\/fr\/howto\/http2.html\" target=\"_blank\" rel=\"noopener noreferrer\">Guide HTTP\/2 du serveur HTTP Apache<\/a><\/li>\n<li><a href=\"https:\/\/daniel.haxx.se\/http2\/\" target=\"_blank\" rel=\"noopener noreferrer\">http2 explained<\/a> : Une ou la r\u00e9f\u00e9rence en la mati\u00e8re<\/li>\n<li><a href=\"https:\/\/fr.wikipedia.org\/wiki\/Hypertext_Transfer_Protocol\/2#cite_note-RFC-7540-t-d-1\" target=\"_blank\" rel=\"noopener noreferrer\">Wikip\u00e9dia &#8211; Hypertext Transfer Protocol\/2Hypertext Transfer Protocol\/2<\/a><\/li>\n<li><a href=\"https:\/\/www.youtube.com\/watch?v=r5oT_2ndjms&amp;feature=youtu.be\" target=\"_blank\" rel=\"noopener noreferrer\">Vid\u00e9o de la conf\u00e9rence \u00ab\u00a0HTTP\/2 101 (Chrome Dev Summit 2015)\u00a0\u00bb<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>HTTP\/2 constitue la derni\u00e8re version majeure du protocole r\u00e9seau HTTP. Cette nouvelle version a \u00e9t\u00e9 \u00e9labor\u00e9e sur la base du projet exp\u00e9rimental SPDY de Google et a pour objectif principal d&rsquo;am\u00e9liorer la vitesse des \u00e9changes de ressources sur le World Wide Web : Pages HTML, scripts Javascript, feuilles de styles, images, etc&#8230; Pour m\u00e9moire, HTTP [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":594,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[93],"tags":[45,96,94,95],"class_list":["post-590","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-reseau","tag-http","tag-protocole","tag-reseau","tag-www"],"_links":{"self":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=590"}],"version-history":[{"count":46,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/590\/revisions"}],"predecessor-version":[{"id":649,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/posts\/590\/revisions\/649"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/media\/594"}],"wp:attachment":[{"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/corsaire-consulting.fr\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}