● PHANTOM
🇼🇳 IN
✕
<-
Apache > Serveur HTTP > Documentation > Version 2.4 > Modules

Module Apache mod_http2

Langues Disponibles:  en  |  fr 

Description:Support de la couche transport HTTP/2
Statut:Extension
Identificateur de Module:http2_module
Fichier Source:mod_http2.c
Compatibilité:Disponible à partir de la version 2.4.17 du serveur HTTP Apache

Sommaire

Ce module ajoute le support de HTTP/2 (RFC 7540) au serveur HTTP Apache.

Il s'appuie sur la bibliothÚque libnghttp2 pour implémenter le moteur de base http/2.

Pour mettre en oeuvre les fonctionnalités décrites dans ce document, vous devez activer HTTP/2 en utilisant la directive Protocols. HTTP/2 n'imposant pas de chiffrement, deux protocoles sont disponibles : h2 (HTTP/2 avec TLS) at h2c (HTTP/2 avec TCP).

Voici deux types de configuration courant :

HTTP/2 dans un contexte de serveur virtuel (TLS seulement)

Protocols h2 http/1.1

Permet une négociation HTTP/2 (h2) via TLS ALPN au sein d'un <VirtualHost> sécurisé. La vérification du préambule HTTP/2 (mode direct, voir H2Direct) est désactivée par défaut pour h2.

HTTP/2 dans un contexte de serveur (TLS et texte pur)

Protocols h2 h2c http/1.1

Permet une négociation HTTP/2 (h2) via TLS ALPN au sein d'un <VirtualHost> sécurisé. Permet aussi une négociation HTTP/2 en texte pur (h2c) en effectuant une mise à jour depuis une connexion initiale HTTP/1.1 ou via une vérification du préambule HTTP/2 (mode direct, voir H2Direct).

Si vous avez besoin d'informations supplémentaires à propos du protocole, veuillez vous reporter à la HTTP/2 FAQ.

Support Apache!

Sujets

Directives

Traitement des bugs

Voir aussi

top

Comment ça marche ?

Quantification des ressources supplémentaires nécessaires à HTTP/2

Activer HTTP/2 sur votre serveur Apache a un impact sur la consommation de ressources, et si votre site est trÚs actif, il est conseillé d'en prendre sérieusement en compte les implications.

HTTP/2 attribue Ă  chaque requĂȘte qu'il reçoit son propre thread de travail pour son traitement, la collecte des rĂ©sultats et l'envoie de ces derniers au client. Pour y parvenir, il lui faut lancer des threads supplĂ©mentaires, et ceci constituera le premier effet notable de l'activation de HTTP/2.

Dans l'implĂ©mentation actuelle, ces threads de travail font partie d'un jeu de threads distinct de celui des threads de travail du MPM avec lequel vous ĂȘtes familiĂ©. Il s'agit simplement du mode de fonctionnement actuel, et il n'en sera pas obligatoirement toujours ainsi (il est cependant probable que la situation restera inchangĂ©e avec la version 2.4.x). De par ce mode de fonctionnement, les threads de travail HTTP/2, ou plus simplement H2 ne seront pas affichĂ©s par mod_status. De mĂȘme, ils ne seront pas pris en compte par les directives du style ThreadsPerChild. Par contre, ils utilisent par dĂ©faut la valeur de ThreadsPerChild si vous n'avez pas spĂ©cifiĂ© d'autres valeurs via H2MinWorkers et H2MaxWorkers.

Autre changement Ă  surveiller : la consommation de mĂ©moire. En effet, comme HTTP/2 conserve plus d'informations sur le serveur pour gĂ©rer toutes les requĂȘtes en cours, leurs prioritĂ©s et interdĂ©pendances, il aura toujours besoin de plus de mĂ©moire que pour un traitement en HTTP/1.1. Trois directives permettent de limiter l'empreinte mĂ©moire d'une connexion HTTP/2 : H2MaxSessionStreams, H2WindowSize et H2StreamMaxMemSize.

La directive H2MaxSessionStreams permet de limiter le nombre de requĂȘtes simultanĂ©es qu'un client peut envoyer sur une connexion HTTP/2. La valeur que vous allez dĂ©finir dĂ©pend de votre site. La valeur par dĂ©faut qui est de 100 est largement suffisante, et Ă  moins que vous ne soyez un peu juste en mĂ©moire, je vous conseille de ne pas la modifier. La plupart des requĂȘtes qu'envoie un client sont des requĂȘtes de type GET sans corps qui n'utilisent que trĂšs peu de mĂ©moire en attendant le dĂ©marrage du traitement.

La directive H2WindowSize permet de dĂ©finir la taille maximale que peut avoir le corps d'une requĂȘte que le client envoie avant d'attendre que le serveur en demande d'avantage. En d'autres termes, il s'agit de la quantitĂ© de donnĂ©es que le serveur peut stocker dans son tampon, valable pour une requĂȘte.

En outre, la directive H2StreamMaxMemSize permet de dĂ©finir la quantitĂ© de donnĂ©es de la rĂ©ponse qui doit ĂȘtre mise en tampon. Chaque requĂȘte Ă©tant prise en charge par un thread H2Worker et produisant des donnĂ©es que le serveur tente de transmettre au client via une connexion HTTP/2, si le client n'est pas en mesure de lire ces donnĂ©es assez rapidement, la connexion les mettra en tampon et interrompra l'exĂ©cution du thread H2Worker correspondant.

Serveurs virtuels et requĂȘtes mal redirigĂ©es

De nombreux site utilisent le mĂȘme certificat TLS pour plusieurs serveurs virtuels. Ce certificat rĂ©fĂ©rence un nom de serveur gĂ©nĂ©rique comme '*.example.org' ou plusieurs noms de serveur diffĂ©rents. Les navigateurs qui utilisent HTTP/2 dĂ©tectent ce comportement et rĂ©utilisent une connexion dĂ©jĂ  ouverte pour ces serveurs.

Ceci amĂ©liore considĂ©rablement les performances, mais il y a un prix Ă  payer : il faut accorder un soin tout particulier Ă  la configuration de tels serveurs virtuels. Le problĂšme rĂ©side dans le fait que plusieurs requĂȘtes pour plusieurs serveurs virtuels vont se partager la mĂȘme connexion TLS, et ceci empĂȘche toute renĂ©gociation car le standard HTTP/2 l'interdit.

Ainsi, lorsque plusieurs de vos serveurs virtuels utilisent le mĂȘme certificat et si vous souhaitez utiliser HTTP/2 pour y accĂ©der, vous devez vous assurer que tous vos serveurs virtuels possĂšdent exactement la mĂȘme configuration SSL. En particulier, ils doivent utiliser les mĂȘmes protocole, algorithme de chiffrement et configuration pour la vĂ©rification du client.

Dans le cas contraire, Apache httpd le détectera et renverra au client un code de réponse spécial, 421 Misdirected Request.

Variables d'environnement

Ce module peut ĂȘtre configurĂ© pour fournir des informations en rapport avec HTTP/2 sous la forme de variables d'environnement supplĂ©mentaires dans l'espace de nommage SSI et CGI, ainsi que dans les configurations personnalisĂ©es de le journalisation (voir %{VAR_NAME}e).

Nom variable : Type : Description :
HTTPedrapeauHTTP/2 est utilisé.
H2PUSHdrapeauLa fonctionnalitĂ© HTTP/2 Server Push est activĂ©e pour cette requĂȘte et supportĂ©e par le client.
H2_PUSHdrapeauautre nom pour H2PUSH
H2_PUSHEDchaĂźnevide ou PUSHED pour une requĂȘte pushĂ©e par le serveur.
H2_PUSHED_ONnombrenumĂ©ro du flux HTTP/2 qui a dĂ©clenchĂ© le push de cette requĂȘte.
H2_STREAM_IDnombrenumĂ©ro du flux HTTP/2 de cette requĂȘte.
H2_STREAM_TAGchaßneidentifiant de flux unique du processus HTTP/2 composé de l'identifiant de la connexion et de l'identifiant du flux séparés par -.
top

Directive H2CopyFiles

Description:ContrÎle la gestion des fichiers dans les réponses
Syntaxe:H2CopyFiles on|off
Défaut:H2CopyFiles off
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.24 du serveur HTTP Apache.

Cette directive permet de dĂ©finir la maniĂšre de gĂ©rer les contenus de fichiers dans les rĂ©ponses. Lorsqu'elle est Ă  off (sa valeur par dĂ©faut), les descripteurs de fichiers sont transmis par le processus de traitement de la requĂȘte vers la connexion principale en utilisant le systĂšme habituel de mise en rĂ©serve d'Apache pour gĂ©rer le durĂ©e de vie du fichier.

Lorsqu'elle est Ă  on, le contenu du fichier est recopier pendant le traitement de la requĂȘte et ces donnĂ©es mises en tampon sont transmises vers la connexion principale, ce qui s'avĂšre avantageux lorsqu'un module tiers injecte dans la rĂ©ponse des fichiers possĂ©dant des durĂ©es de vie diffĂ©rentes.

Un exemple de ces modules tiers : mod_wsgi qui peut injecter des descripteurs de fichiers dans la réponse. Ces fichiers sont fermés lorsque Python estime que le traitement est terminé, alors que mod_http2 est probablement encore loin d'en avoir fini avec eux.

top

Directive H2Direct

Description:Activation du protocole H2 Direct
Syntaxe:H2Direct on|off
Défaut:H2Direct on pour h2c, off pour le protocole h2
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2

Cette directive permet d'activer/dĂ©sactiver l'utilisation du mode HTTP/2 Direct. Elle doit ĂȘtre situĂ©e dans une section <VirtualHost> afin d'activer la communication directe HTTP/2 pour le serveur virtuel considĂ©rĂ©.

La notion de communication directe signifie que si les premiers octets reçus par le serveur correspondent Ă  un en-tĂȘte HTTP/2, le protocole HTTP/2 est utilisĂ© sans nĂ©gociation supplĂ©mentaire. Ce mode est dĂ©fini pour les transmissions en clair (h2c) dans la RFC 7540. Son utilisation avec les connexions TLS n'est pas officiellement supportĂ©e.

Lorsque le protocole h2 ou h2c n'est pas activĂ© via la directive Protocols, la recherche d'un en-tĂȘte HTTP/2 n'est jamais effectuĂ©e au sein d'une connexion. La directive H2Direct ne produit alors aucun effet. Ceci est important pour les connexions qui utilisent un protocole pour lequel une lecture initiale peut entraĂźner un blocage dĂ©finitif comme NNTP.

Pour un client qui sait qu'un serveur supporte h2c, la communication directe HTTP/2 dispense le client d'une mise Ă  jour HTTP/1.1, ce qui entraĂźne une amĂ©lioration des performances et Ă©vite les restrictions sur les corps de requĂȘte suite Ă  une mise Ă  jour.

Cette directive rend aussi h2c plus attractif pour les communications de serveur Ă  serveur lorsque la connexion est sure ou peut ĂȘtre sĂ©curisĂ©e d'une maniĂšre ou d'une autre.

Exemple

H2Direct on
top

Directive H2EarlyHint

Description:Ajoute un en-tĂȘte de rĂ©ponse Ă  consulter dans le code de retour 103 Early Hints
Syntaxe:H2EarlyHint name value
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.58 du serveur HTTP Apache.

La directive H2EarlyHint permet d'ajouter un en-tĂȘte de rĂ©ponse avant le dĂ©marrage du traitement proprement dit de la requĂȘte. Les en-tĂȘtes de ce style sont consultables dans les rĂ©ponses intermĂ©diaires "103 Early Hints" et ils ont pour but principal d'envoyer des informations de "prĂ©chargement" aux navigateurs clients.

name et value doivent ĂȘtre des champs d'en-tĂȘte HTTP valables sous peine de provoquer des Ă©checs de rĂ©ponse. La directive H2EarlyHints doit encore ĂȘtre activĂ©e pour permettre l'envoi de rĂ©ponses intermĂ©diaires de code 103. Elle peut ĂȘtre rĂ©pĂ©tĂ©e plusieurs fois et les champs d'en-tĂȘte de mĂȘme nom s'ajoutent.

Exemple

H2EarlyHint Link "</my.css>;rel=preload;as=style"
top

Directive H2EarlyHints

Description:ContrÎle l'envoi de codes d'état 103
Syntaxe:H2EarlyHints on|off
Défaut:H2EarlyHints off
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.24 du serveur HTTP Apache.

Cette directive permet de dĂ©finir si les rĂ©ponses intermĂ©diaires contenant un code d'Ă©tat HTTP 103 doivent ĂȘtre envoyĂ©es au client ou non. Par dĂ©faut ce n'est actuellement pas le cas car certains clients ont encore des problĂšmes avec les rĂ©ponses intermĂ©diaires inattendues.

Lorsque cette directive est dĂ©finie Ă  on, les ressources PUSHĂ©es dĂ©finie par la directive H2PushResource dĂ©clenchent une rĂ©ponse intermĂ©diaire 103 avant la rĂ©ponse finale. Cette rĂ©ponse 103 comporte des en-tĂȘtes Link qui provoquent le prĂ©chargement des ressources considĂ©rĂ©es.

top

Directive H2MaxDataFrameLen

Description:Nombre maximal d'octets dans une trame HTTP/2 DATA
Syntaxe:H2MaxDataFrameLen n
Défaut:H2MaxDataFrameLen 0
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.58 du serveur HTTP Apache.

La directive H2MaxDataFrameLen permet de définir le nombre maximal d'octets du corps de réponse que l'on peut placer dans une seule trame HTTP/2 DATA. La valeur 0 signifie aucune limite (mais la taille maximale permise par le protocole est respectée).

Par défaut, le module essaie d'utiliser la taille maximale possible qui est d'environ 16 Ko. Il s'agit cependant de la taille maximale, et lorsque la taille des données de la réponse est inférieure, les trames envoyées sont plus courtes.

top

Directive H2MaxHeaderBlockLen

Description:Taille maximale des en-tĂȘtes d’une rĂ©ponse
Syntaxe:H2MaxHeaderBlockLen n
Défaut:H2MaxHeaderBlockLen 0
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.64 du serveur HTTP Apache.

La directive H2MaxHeaderBlockLen permet de dĂ©finir la taille maximale globale des en-tĂȘtes d’une rĂ©ponse. DĂ©finir cette directive Ă  0 implique une taille maximale de 64 ko dans nghttp2, ce qui correspond Ă  la valeur par dĂ©faut.

Les rĂ©ponses dont la somme des tailles de tous les en-tĂȘtes est supĂ©rieure Ă  la valeur de cette directive ne seront pas traitĂ©es et provoqueront une rĂ©initialisation du flux.

top

Directive H2MaxSessionStreams

Description:Nombre maximal de flux actifs par session HTTP/2.
Syntaxe:H2MaxSessionStreams n
Défaut:H2MaxSessionStreams 100
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2

Cette directive permet de définir le nombre maximal de flux actifs par session (connexion) HTTP/2 accepté par le serveur. Selon la RFC 7540, un flux est considéré comme actif s'il n'est ni en attente ni fermé.

Exemple

H2MaxSessionStreams 20
top

Directive H2MaxStreamErrors

Description:Nombre maximal tolĂ©rĂ© d’erreurs dues au client
Syntaxe:H2MaxStreamErrors n
Défaut:H2MaxStreamErrors 8
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.5.1 du serveur HTTP Apache.

La directive H2MaxStreamErrors permet de dĂ©finir le nombre maximal tolĂ©rĂ© d’erreurs de flux HTTP/2 causĂ©es par le client. Si cette limite est dĂ©passĂ©e, la connexion sera fermĂ©e. Les erreurs de flux sont des violations du protocole sur un flux HTTP/2 individuel pour lesquelles la spĂ©cification du protocole n’exige pas de fermeture de la connexion, mais qui peuvent ĂȘtre un signe d’activitĂ© malveillante de la part du client.

Définissez cette directive à 0 pour vous prémunir contre les clients qui provoquent des erreurs.

top

Directive H2MaxWorkerIdleSeconds

Description:Nombre maximal de secondes pendant lequel une unitĂ© de traitement h2 pourra rester inactive sans ĂȘtre arrĂȘtĂ©e.
Syntaxe:H2MaxWorkerIdleSeconds n
Défaut:H2MaxWorkerIdleSeconds 600
Contexte:configuration globale
Statut:Extension
Module:mod_http2

Cette directive permet de dĂ©finir le nombre maximal de secondes pendant lequel une unitĂ© de traitement h2 pourra rester inactive avant de s'arrĂȘter elle-mĂȘme. Cet arrĂȘt ne peut cependant se produire que si le nombre d'unitĂ©s de traitement h2 dĂ©passe H2MinWorkers.

Exemple

H2MaxWorkerIdleSeconds 20
top

Directive H2MaxWorkers

Description:Nombre maximal de threads Ă  utiliser pour chaque processus enfant.
Syntaxe:H2MaxWorkers n
Contexte:configuration globale
Statut:Extension
Module:mod_http2

Cette directive permet de définir le nombre maximal de threads à lancer pour le traitement HTTP/2 de chaque processus enfant. Si cette directive n'est pas définie, mod_http2 choisira une valeur appropriée en fonction du module mpm utilisé. This directive sets the maximum number of worker threads to spawn per child process for HTTP/2 processing. If this directive is not used, mod_http2 will chose a value suitable for the mpm module loaded.

Exemple

H2MaxWorkers 20
top

Directive H2MinWorkers

Description:Nombre minimal de threads Ă  utiliser pour chaque processus enfant.
Syntaxe:H2MinWorkers n
Contexte:configuration globale
Statut:Extension
Module:mod_http2

Cette directive permet de définir le nombre minimal de threads à lancer pour le traitement HTTP/2 de chaque processus enfant. Si cette directive n'est pas définie, mod_http2 choisira une valeur appropriée en fonction du module mpm utilisé.

Exemple

H2MinWorkers 10
top

Directive H2ModernTLSOnly

Description:Impose les connexions HTTP/2 en mode "TLS moderne" seulement
Syntaxe:H2ModernTLSOnly on|off
Défaut:H2ModernTLSOnly on
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.18 du serveur HTTP Apache.

Cette directive permet de dĂ©finir si les vĂ©rifications de sĂ©curitĂ© sur les connexions HTTP/2 doivent ĂȘtre exclusivement en mode TLS (https:). Elle peut ĂȘtre placĂ©e au niveau du serveur principal ou dans une section <VirtualHost>.

Les vérifications de sécurité nécessitent TLSv1.2 au minimum et l'absence de tout algorithme de chiffrement listé dans la RFC 7540, Appendix A. Ces vérifications seront étendues lorsque de nouveaux prérequis en matiÚre de sécurité seront mis en place.

Le nom provient des dĂ©finitions Mozilla Security/Server Side TLS oĂč il est question de "modern compatibility". Mozilla Firefox et d'autres navigateurs imposent la "modern compatibility" pour les connexions HTTP/2. Comme toute chose en matiĂšre de sĂ©curitĂ© opĂ©rationnelle, c'est une cible mouvante susceptible d'Ă©voluer dans le futur.

Un des buts de ces vérifications dans mod_http2 tend à imposer ce niveau de sécurité pour toutes les connexions, et non seulement celles en provenance des navigateurs web. Un autre but est l'interdiction d'utiliser HTTP/2 en tant que protocole dans les négociations si les prérequis ne sont pas respectés.

En fin de compte, la sécurité de la connexion TLS est déterminée par les directives de configuration du serveur pour mod_ssl.

Exemple

H2ModernTLSOnly off
top

Directive H2OutputBuffering

Description:ContrĂŽle la mise en tampon du flux de sortie
Syntaxe:H2OutputBuffering on|off
Défaut:H2OutputBuffering on
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.48 du serveur HTTP Apache.

La directive H2OutputBuffering permet de contrÎler la mise en tampon du flux de sortie. La valeur par défaut est on, ce qui correspond au comportement des versions précédentes. Lorsqu'elle est à off, chaque octet est immédiatement disponible pour envoi au client via la connexion principale. Ceci permet de résoudre les problÚmes d'inter-opérations avec certaines versions de gRPC.

top

Directive H2Padding

Description:Spécifie un intervalle de nombres d'octets de bourrage à ajouter aux trames utiles
Syntaxe:H2Padding numbits
Défaut:H2Padding 0
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.39 du serveur HTTP Apache.

La valeur par défaut 0 indique qu'aucun octet de bourrage ne sera ajouté aux trames utiles comme HEADERS, DATA et PUSH_PROMISE. Ceci correspond au comportement des versions précédentes. Dans ce cas et sous certaines conditions, un observateur du trafic réseau pourra alors déterminer la longueur de ces trames dans le flux TLS.

Si on attribue à numbits la valeur 1-8, un nombre aléatoire d'octets entre 0 et 2^numbits sont ajoutés à chaque trame. Une valeur aléatoire d'octets de bourrage est attribué indépendamment à chaque trame que le module renvoie au client.

Pour améliorer la dissimulation de la longueur des trames, on peut augmenter le nombre moyen d'octets de bourrage, mais cela augmente d'autant le trafic réseau. Le nombre optimal d'octets de bourrage dépend donc du type de trafic web que le serveur engendre.

La valeur par dĂ©faut de 0 (aucun octet de bourrage) a Ă©tĂ© choisie dans un but de compatibilitĂ© ascendante. Il peut en effet exister des installations oĂč les octets de bourrage ne sont pas souhaitĂ©s ou sont nĂ©fastes. La cause principale peut provenir d'un client dont l'implĂ©mentation comporte des erreurs.

top

Directive H2ProxyRequests

Description:Active/DĂ©sactive les requĂȘtes sous mandat direct via HTTP/2
Syntaxe:H2ProxyRequests on|off
Défaut:H2ProxyRequests off
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.58 du serveur HTTP Apache

La directive H2ProxyRequests permet d'activer ou de dĂ©sactiver la gestion des requĂȘtes HTTP/2 dans un contexte de mandat direct.

Similaire Ă  ProxyRequests, cette directive dĂ©clenche le traitement nĂ©cessaire des requĂȘtes lorsque HTTP/2 est activĂ© dans un contexte de mandat direct.

top

Directive H2Push

Description:Activation/désactivation du server push H2
Syntaxe:H2Push on|off
Défaut:H2Push on
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.18 du serveur HTTP Apache.

Cette directive permet d'activer/désactiver l'utilisation de la fonctionnalité server push du protocole HTTP/2.

Lorsqu'un client demande une ressource particuliĂšre, le protocole HTTP/2 permet au serveur de lui fournir des ressources supplĂ©mentaires. Ceci s'avĂšre utile lorsque ces ressources sont reliĂ©es entre elles, ce qui peut laisser supposer que le client va probablement les demander dans un dĂ©lai plus ou moins long. Le mĂ©canisme de pushing permet alors au client d'Ă©conomiser le temps qu'il lui aurait fallu pour demander ces ressources supplĂ©mentaires lui-mĂȘme. Par contre, fournir au client des ressources dont il n'a pas besoin ou qu'il possĂšde dĂ©jĂ  constitue une perte de bande passante.

Les server pushes sont dĂ©tectĂ©s en inspectant les en-tĂȘtes Link des rĂ©ponses (voir https://tools.ietf.org/html/rfc5988 pour la spĂ©cification). Lorsqu'un lien spĂ©cifiĂ© de cette maniĂšre possĂšde l'attribut rel=preload, il est considĂ©rĂ© comme devant faire l'objet d'un push.

Les en-tĂȘtes link des rĂ©ponses sont soit dĂ©finis par l'application, soit configurĂ©s via H2PushResource ou mod_headers comme suit :

Exemple de configuration d'en-tĂȘte link via mod_headers

<Location /index.html>
    Header add Link "</css/site.css>;rel=preload"
    Header add Link "</images/logo.jpg>;rel=preload"
</Location>

Comme le montre l'exemple, il est possible d'ajouter autant d'en-tĂȘtes link que l'on souhaite Ă  une rĂ©ponse, ce qui dĂ©clenchera autant de pushes. Cette fonctionnalitĂ© doit donc ĂȘtre utilisĂ©e avec prudence car le module ne vĂ©rifie pas si une ressource n'a pas dĂ©jĂ  Ă©tĂ© "pushĂ©e" vers un client.

Les PUSH HTTP/2 sont activĂ©s par dĂ©faut. Vous pouvez activer/dĂ©sactiver cette fonctionnalitĂ© pour toute connexion au serveur au niveau global ou serveur virtuel. Vous pouvez en outre dĂ©sactiver PUSH pour un jeu de ressources dans une section Directory/Location. Notez que ceci permet de contrĂŽler quelles ressources peuvent dĂ©clencher un PUSH, mais pas les ressources qui peuvent ĂȘtre envoyĂ©es via PUSH.

Exemple

H2Push off

Enfin, il est important de savoir que les pushes ne se produisent que si le client en manifeste le dĂ©sir ; la plupart des navigateurs le font, mais certains, comme Safari 9, ne le font pas. En outre, les pushes ne se produisent que pour les ressources de la mĂȘme autoritĂ© que celle de la rĂ©ponse originale.

top

Directive H2PushDiarySize

Description:Taille du journal des Pushes H2
Syntaxe:H2PushDiarySize n
Défaut:H2PushDiarySize 256
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.19 du serveur HTTP Apache.

Cette directive permet de dĂ©finir le nombre maximum de pushes qui seront enregistrĂ©s pour une connexion HTTP/2. Elle peut ĂȘtre placĂ©e dans une section <VirtualHost> afin de dĂ©finir le nombre de pushes pour le serveur virtuel considĂ©rĂ©.

Le journal des pushes enregistre un condensĂ© des ressources prĂ©chargĂ©es (leurs URLs) afin d'Ă©viter les duplications de pushes pour une mĂȘme connexion. Cependant, ces donnĂ©es ne sont pas conservĂ©es, et les clients qui ouvrent une nouvelle connexion se verront Ă  nouveau affecter les mĂȘmes pushes.

Si la taille maximale est atteinte, les nouvelles entrées remplacent les plus anciennes. Une entrée du journal nécessitant 8 octets, un journal de 256 entrées consomme 2 Ko de mémoire.

Si cette directive est définie à 0, le journal des pushes est désactivé.

top

Directive H2PushPriority

Description:Priorité des pushes H2
Syntaxe:H2PushPriority mime-type [after|before|interleaved] [weight]
Défaut:H2PushPriority * After 16
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.18 du serveur HTTP Apache. Nécessite la bibliothÚque nghttp2 version 1.5.0 ou supérieure.

Cette directive permet de dĂ©finir une gestion de prioritĂ© des pushes en fonction du type de contenu de la rĂ©ponse. Elle est en gĂ©nĂ©ral dĂ©finie au niveau du serveur principal, mais peut aussi l'ĂȘtre au niveau d'un serveur virtuel.

Les pushes HTTP/2 sont toujours liĂ©s Ă  une requĂȘte client. Chaque paire requĂȘte/rĂ©ponse de cette sorte, ou flux, possĂšde une dĂ©pendance et un poids qui dĂ©finissent la prioritĂ© du flux.

Lorsqu'un flux dĂ©pend d'un autre, disons X dĂ©pend de Y, alors Y reçoit toute la bande passante avant que X n'en reçoive ne serait-ce qu'une partie. Notez que cela ne signifie en rien que Y bloque X ; en effet, si Y n'a aucune donnĂ©e Ă  envoyer, toute la bande passante qui lui est allouĂ©e peut ĂȘtre utilisĂ©e par X.

Lorsque plusieurs flux dĂ©pendent d'un mĂȘme autre flux, disons X1 et X2 dĂ©pendent tous deux de Y, le poids dĂ©termine la bande passante allouĂ©e. Ainsi, si X1 et X2 possĂšdent le mĂȘme poids, ils recevront tous deux la moitiĂ© de la bande passante disponible. Si le poids de X1 est Ă©gal au double de celui de X2, X1 recevra une bande passante double de celle de X2.

En fin de compte, tout flux dĂ©pend du flux racine qui reçoit toute la bande passante disponible mais n'envoie jamais de donnĂ©es. Cette bande passante est ainsi rĂ©partie entre les flux enfants selon leur poids. Ces derniers l'utilisent alors pour envoyer leurs donnĂ©es ou pour la rĂ©partir entre leurs propres flux enfants, et ainsi de suite. Si aucun des flux enfants n'a de donnĂ©es Ă  envoyer, la bande passante est attribuĂ©e Ă  d'autres flux selon les mĂȘmes rĂšgles.

Ce systĂšme de prioritĂ©s a Ă©tĂ© conçu de façon a toujours pouvoir utiliser la bande passante disponible tout en dĂ©finissant des prioritĂ©s et en attribuant des poids aux diffĂ©rents flux. Ainsi, tous les flux sont en gĂ©nĂ©ral initialisĂ©s par le client qui lui-mĂȘme dĂ©finit les prioritĂ©s.

Seul le fait de savoir qu'un flux implique un PUSH permet au serveur de décider quelle est la priorité initiale d'un tel flux. Dans les exemples ci-dessous, X est le flux client. Il dépend de Y et le serveur décide de "PUSHer" les flux P1 et P2 sur X.

La rÚgle de priorité par défaut est :

RÚgle de priorité par défaut

H2PushPriority * After 16

Elle peut se traduire par "Envoyer un flux PUSH avec tout type de contenu et dĂ©pendant du flux client avec le poids 16". P1 et P2 seront alors envoyĂ©s aprĂšs X, et comme leurs poids sont identiques, il se verront allouer la mĂȘme quantitĂ© de bande passante.

RÚgle de priorité entrelacée

H2PushPriority text/css Interleaved 256

Ce qui peut se traduire par "Envoyer toute ressource CSS dans la mĂȘme dĂ©pendance et avec le mĂȘme poids que le flux client". Si le type de contenu de P1 est "text/css", il dĂ©pendra de Y (comme X) et son poids effectif sera calculĂ© selon la formule : P1ew = Xw * (P1w / 256). Si P1w est de 256, Le poids effectif de P1 sera le mĂȘme que celui de X. Si X et P1 ont des donnĂ©es Ă  envoyer, il se verront allouer la mĂȘme quantitĂ© de bande passante.

Avec un Pw de 512, un flux entrelacé et PUSHé aura un poids double de celui de X. Avec un poids de 128, son poids ne sera que la moitié de celui de X. Notez que les poids effectifs sont toujours plafonnés à 256.

RÚgle de priorité Before

H2PushPriority application/json Before

Dans cet exemple, tout flux PUSHé dont le contenu est de type 'application/json' sera envoyé avant X, ce qui rend P1 dépendant de Y et X dépendant de P1. Ainsi, X sera mis en attente aussi longtemps que P1 aura des données à envoyer. Le poids effectif est hérité du flux client, et l'attribution d'un poids spécifique n'est pas autorisée.

Vous devez garder à l'esprit que les spécifications en matiÚre de priorités sont limitées par les ressources disponibles du serveur. Si un serveur ne dispose d'aucun processus/thread de travail pour les flux PUSHés, les données du flux considéré ne seront envoyées que lorsque les autres flux auront terminé l'envoi des leurs.

Enfin et surtout, il convient de tenir compte de certaines particularités de la syntaxe de cette directive :

  1. '*' est la seule expression permettant de remplacer tout type de contenu. 'image/*' ne fonctionnera pas.
  2. La dépendance par défaut est 'After'.
  3. Il existe aussi des poids par défaut : pour 'After' le poids est de 16, alors que pour 'interleaved' il est de 256.

Exemples de rĂšgles

H2PushPriority application/json 32         # une rÚgle de priorité 'After'
H2PushPriority image/jpeg before           # poid hérité
H2PushPriority text/css   interleaved      # poids de 256 par défaut
top

Directive H2PushResource

Description:Déclare des ressources à proposer ("pusher") au client
Syntaxe:H2PushResource [add] path [critical]
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.24 du serveur HTTP Apache.

Lorsqu'il sont activĂ©s pour un rĂ©pertoire, les PUSHes HTTP/2 seront tentĂ©s pour tous les chemins ajoutĂ©s via cette directive. Cette derniĂšre peut ĂȘtre utilisĂ©e plusieurs fois pour le mĂȘme rĂ©pertoire.

Cette directive propose des ressources beaucoup plus tĂŽt que les en-tĂȘtes Link de mod_headers. mod_http2 prĂ©sente ces ressources au client via une rĂ©ponse intermĂ©diaire 103 Early Hints. Ceci implique que les clients qui ne supportent pas PUSH recevront quand-mĂȘme rapidement des propositions de prĂ©chargement.

A la diffĂ©rence de la dĂ©finition d'en-tĂȘtes de rĂ©ponse Link via mod_headers, cette directive n'aura d'effet que pour les connexions HTTP/2.

En ajoutant l'option critical Ă  une telle ressource, le serveur la traitera prioritairement, et une fois les donnĂ©es disponibles, ces derniĂšres seront envoyĂ©es avant les donnĂ©es de la requĂȘte principale.

top

Directive H2SerializeHeaders

Description:Active/dĂ©sactive la sĂ©rialisation du traitement des requĂȘtes/rĂ©ponses
Syntaxe:H2SerializeHeaders on|off
Défaut:H2SerializeHeaders off
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2

Cette directive permet de dĂ©finir si les requĂȘtes HTTP/2 doivent ĂȘtre sĂ©rialisĂ©es au format HTTP/1.1 pour ĂȘtre traitĂ©es par le noyau de httpd, ou si les donnĂ©es binaires reçues doivent ĂȘtre passĂ©es directement aux request_recs.

La sérialisation dégrade les performances, mais garantit une meilleure compatibilité ascendante lorsque des filtres ou programmes accroche personnalisés en ont besoin.

Exemple

H2SerializeHeaders on
top

Directive H2StreamMaxMemSize

Description:Quantité maximale de données en sortie mises en tampon par flux.
Syntaxe:H2StreamMaxMemSize bytes
Défaut:H2StreamMaxMemSize 65536
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2

Cette directive permet de dĂ©finir la quantitĂ© maximale de donnĂ©es en sortie mises en tampon mĂ©moire pour un flux actif. Ce tampon mĂ©moire n'est pas allouĂ© pour chaque flux en tant que tel. Les quantitĂ©s de mĂ©moire sont dĂ©finies en fonction de cette limite lorsqu'elles sont sur le point d'ĂȘtre allouĂ©es. Le flux s'arrĂȘte lorsque la limite a Ă©tĂ© atteinte, et ne reprendra que lorsque les donnĂ©es du tampon auront Ă©tĂ© transmises au client.

Exemple

H2StreamMaxMemSize 128000
top

Directive H2StreamTimeout

Description:Temps d'attente maximum lors de l'envoi/réception de données pour le traitement d'un flux
Syntaxe:H2StreamTimeout time-interval[s]
Défaut:La valeur de la directive Timeout
Contexte:configuration globale, serveur virtuel, répertoire
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.55 du serveur HTTP Apache.

H2StreamTimeout permet de spécifier le temps maximum pendant lequel un flux en cours de traitement attendra pour l'envoi/réception de ses données.

top

Directive H2TLSCoolDownSecs

Description:Durée d'inactivité d'une connexion TLS avant diminution de la taille des paquets
Syntaxe:H2TLSCoolDownSecs seconds
Défaut:H2TLSCoolDownSecs 1
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.18 du serveur HTTP Apache.

Cette directive permet de spĂ©cifier le nombre de secondes avant lequel une connexion TLS inactive va diminuer la taille des paquets de donnĂ©es Ă  une valeur infĂ©rieure (~1300 octets). Elle peut ĂȘtre dĂ©finie au niveau du serveur principal ou pour un <serveur virtuel> spĂ©cifique.

Voir la directive H2TLSWarmUpSize pour une description du "prĂ©chauffage" de TLS. La directive H2TLSCoolDownSecs met en lumiĂšre le fait que les connexions peuvent se dĂ©tĂ©riorer au bout d'un certain temps (et au fur et Ă  mesure des corrections du flux TCP), et cela mĂȘme si elle sont inactives. Pour ne pas dĂ©tĂ©riorer les performances d'une maniĂšre gĂ©nĂ©rale, il est par consĂ©quent prĂ©fĂ©rable de revenir Ă  la phase de prĂ©chauffage lorsqu'aucune donnĂ©e n'a Ă©tĂ© transmise pendant un certain nombre de secondes.

Dans les situations oĂč les connexions peuvent ĂȘtre considĂ©rĂ©es comme fiables, ce dĂ©lai peut ĂȘtre dĂ©sactivĂ© en dĂ©finissant cette directive Ă  0.

Dans l'exemple suivant, la directive est définie à 0, ce qui désactive tout retour à une phase de préchauffage des connexions TLS. Les connexions TLS déjà préchauffées conservent donc toujours leur taille de paquet de données maximale.

Exemple

H2TLSCoolDownSecs 0
top

Directive H2TLSWarmUpSize

Description:Taille des paquets durant la phase initiale de la connexion TLS
Syntaxe:H2TLSWarmUpSize amount
Défaut:H2TLSWarmUpSize 1048576
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.18 du serveur HTTP Apache.

Cette directive permet de dĂ©finir le nombre d'octets Ă  envoyer dans les petits enregistrements TLS (~1300 octets) avant d'atteindre leur taille maximale de 16 ko pour les connexions https: HTTP/2. Elle peut ĂȘtre dĂ©finie au niveau du serveur principal ou pour des <Serveurs virtuels> spĂ©cifiques.

Les mesures effectuées par les laboratoires de performances de Google montrent que les meilleurs performances sont atteintes pour les connexions TLS si la taille initiale des enregistrements reste en deça du niveau du MTU afin de permettre à la totatlité d'un enregistrement d'entrer dans un paquet IP.

Comme TCP ajuste son contrĂŽle de flux et sa taille de fenĂȘtre, des enregistrements TLS trop longs peuvent rester en file d'attente ou mĂȘme ĂȘtre perdus et devoir alors ĂȘtre réémis. Ceci est bien entendu vrai pour tous les paquets ; cependant, TLS a besoin de la totalitĂ© de l'enregistrement pour pouvoir le dĂ©chiffrer. Tout octet manquant rendra impossible l'utilisation de ceux qui ont Ă©tĂ© reçus.

Lorqu'un nombre suffisant d'octets a Ă©tĂ© transmis avec succĂšs, la connexion TCP est stable, et la taille maximale (16 ko) des enregistrements TLS peut ĂȘtre utilisĂ©e pour des performances optimales.

Dans les architectures oĂč les serveurs sont atteints par des machines locales ou pour les connexions de confiance seulement, la valeur de cette directive peut ĂȘtre dĂ©finie Ă  0, ce qui a pour effet de dĂ©sactiver la "phase de chauffage".

Dans l'exemple suivant, la phase de chauffage est effectivement désactivée en définissant la directive à 0.

Exemple

H2TLSWarmUpSize 0
top

Directive H2Upgrade

Description:Activation/Désactivation du protocole de mise à jour H2
Syntaxe:H2Upgrade on|off
Défaut:H2Upgrade on pour h2c, off pour h2
Contexte:configuration globale, serveur virtuel, répertoire, .htaccess
Statut:Extension
Module:mod_http2

Cette directive permet d'activer/dĂ©sactiver l'utilisation de la mĂ©thode de mise Ă  jour pour passer de HTTP/1.1 Ă  HTTP/2. Elle doit ĂȘtre placĂ©e dans une section <VirtualHost> afin d'activer la mise Ă  jour vers HTTP/2 pour le serveur virtuel considĂ©rĂ©.

Cette mĂ©thode de changement de protocole est dĂ©finie dans HTTP/1.1 et utilise l'en-tĂȘte "Upgrade" (d'oĂč son nom) pour indiquer l'intention d'utiliser un autre protocole. Cet en-tĂȘte peut ĂȘtre prĂ©sent dans toute requĂȘte sur une connexion HTTP/1.1.

Elle activée par défaut pour les transmissions en clair (h2c), et désactivée avec TLS (h2), comme préconisé par la RFC 7540.

Sachez cependant que les mises Ă  jour ne sont acceptĂ©es que pour les requĂȘtes qui ne possĂšdent pas de corps. Le requĂȘtes de type POST et PUT avec un contenu ne feront jamais l'objet d'une mise Ă  jour vers HTTP/2. Se rĂ©fĂ©rer Ă  la documentation de la directive H2Direct pour envisager une alternative Ă  Upgrade.

Cette directive n'a d'effet que si h2 ou h2c est activé via la directive Protocols.

Exemple

H2Upgrade on
top

Directive H2WebSockets

Description:Active/désactive les WebSockets via HTTP/2
Syntaxe:H2WebSockets on|off
Défaut:H2WebSockets off
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2
Compatibilité:Disponible à partir de la version 2.4.58 du serveur HTTP Apache

La directive H2WebSockets permet d'activer ou de désactiver l'amorçage des WebSockets via le protocole HTTP/2. Cette extension du protocole est définie dans la RFC 8441.

Ces requĂȘtes sont similaires Ă  CONNECT, mais elles possĂšdent l'en-tĂȘte supplĂ©mentaire ':protocol'. Elles sont transformĂ©es au sein du module en leurs Ă©quivalents HTTP/1.1 avant d'ĂȘtre soumises au traitement interne.

Cela signifie que les WebSockets HTTP/2 peuvent ĂȘtre utilisĂ©s dans le cadre d'une directive ProxyPass avec le paramĂštre 'upgrade=websocket' sans autres modifications.

Pour les modules tiers qui gĂšrent les WebSockets directement dans le serveur, l'amorçage du protocole lui-mĂȘme fonctionnera aussi. Dans le cas de HTTP/2 cependant, le transfert de donnĂ©es nĂ©cessite une prise en charge supplĂ©mentaire. Le WebSocket nĂ©gociĂ© sera incapable d'utiliser le socket de connexion du client pour examiner les Ă©vĂšnements d'entrĂ©e/sortie concernĂ©s.

Cette fonctionnalité étant susceptible de briser la compatibilité ascendante pour de tels modules tiers, elle n'est pas activée par défaut.

top

Directive H2WindowSize

Description:Taille maximale des paquets de données pour les transmissions client vers serveur.
Syntaxe:H2WindowSize bytes
Défaut:H2WindowSize 65535
Contexte:configuration globale, serveur virtuel
Statut:Extension
Module:mod_http2

Cette directive permet de dĂ©finir la taille maximale des paquets de donnĂ©es envoyĂ©s par le client au serveur, et limite la quantitĂ© de donnĂ©es que le serveur doit mettre en tampon. Le client arrĂȘtera d'envoyer des donnĂ©es sur un flux lorsque cette limite sera atteinte jusqu'Ă  ce que le serveur indique qu'il dispose d'un espace suffisant (car il aura traitĂ© une partie des donnĂ©es).

Cette limite n'affecte que les corps de requĂȘtes, non les mĂ©tadonnĂ©es comme les en-tĂȘtes. Par contre, elle n'affecte pas les corps de rĂ©ponses car la taille maximale de ces derniers est gĂ©rĂ©e au niveau des clients.

Exemple

H2WindowSize 128000

Langues Disponibles:  en  |  fr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.