1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>mod_http2 - Serveur HTTP Apache Version 2.4</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body>
<div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p>
<p class="apache">Serveur HTTP Apache Version 2.4</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Module Apache mod_http2</h1>
<div class="toplang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_http2.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/mod/mod_http2.html" title="Français"> fr </a></p>
</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Support de la couche transport HTTP/2</td></tr>
<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur de Module:</a></th><td>http2_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Fichier Source:</a></th><td>mod_http2.c</td></tr>
<tr><th><a href="module-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.17 du serveur
HTTP Apache</td></tr></table>
<h3>Sommaire</h3>
<p>Ce module ajoute le support de HTTP/2 (<a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a>) au serveur HTTP
Apache.</p>
<p>Il s'appuie sur la bibliothèque <a href="http://nghttp2.org/">libnghttp2</a> pour implémenter le
moteur de base http/2.</p>
<p>Pour mettre en oeuvre les fonctionnalités décrites dans ce
document, vous devez activer HTTP/2 en utilisant la directive
<code class="directive"><a href="../mod/core.html#protocols">Protocols</a></code>. HTTP/2 <a href="https://http2.github.io/faq/#does-http2-require-encryption">n'imposant
pas</a> de chiffrement, deux protocoles sont disponibles :
<code>h2</code> (HTTP/2 avec TLS) at <code>h2c</code> (HTTP/2 avec TCP).</p>
<p>Voici deux types de configuration courant :</p>
<div class="note"><h3>HTTP/2 dans un contexte de serveur virtuel (TLS seulement)</h3>
<pre class="prettyprint lang-config">Protocols h2 http/1.1</pre>
<p>Permet une négociation HTTP/2 (h2) via TLS ALPN au sein d'un
<code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code>
sécurisé. La vérification du préambule HTTP/2 (mode direct, voir
<code class="directive"><a href="#h2direct">H2Direct</a></code>) est désactivée par
défaut pour <code>h2</code>.</p>
</div>
<div class="note"><h3>HTTP/2 dans un contexte de serveur (TLS et texte pur)</h3>
<pre class="prettyprint lang-config">Protocols h2 h2c http/1.1</pre>
<p>Permet une négociation HTTP/2 (h2) via TLS ALPN au sein d'un
<code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code>
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
<code class="directive"><a href="#h2direct">H2Direct</a></code>).</p>
</div>
<p>Si vous avez besoin d'informations supplémentaires à propos du
protocole, veuillez vous reporter à la <a href="https://http2.github.io/faq">HTTP/2 FAQ</a>.</p>
</div>
<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><h3>Sujets</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif" /> <a href="#how-it-works">Comment ça marche ?</a></li>
</ul><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#h2copyfiles">H2CopyFiles</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2direct">H2Direct</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2earlyhint">H2EarlyHint</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2earlyhints">H2EarlyHints</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2maxdataframelen">H2MaxDataFrameLen</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2maxsessionstreams">H2MaxSessionStreams</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2maxworkeridleseconds">H2MaxWorkerIdleSeconds</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2maxworkers">H2MaxWorkers</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2minworkers">H2MinWorkers</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2moderntlsonly">H2ModernTLSOnly</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2outputbuffering">H2OutputBuffering</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2padding">H2Padding</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2proxyrequests">H2ProxyRequests</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2push">H2Push</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2pushdiarysize">H2PushDiarySize</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2pushpriority">H2PushPriority</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2pushresource">H2PushResource</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2serializeheaders">H2SerializeHeaders</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2streammaxmemsize">H2StreamMaxMemSize</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2streamtimeout">H2StreamTimeout</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2tlscooldownsecs">H2TLSCoolDownSecs</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2tlswarmupsize">H2TLSWarmUpSize</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2upgrade">H2Upgrade</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2websockets">H2WebSockets</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#h2windowsize">H2WindowSize</a></li>
</ul>
<h3>Traitement des bugs</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">Journal des modifications de httpd</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&list_id=144532&product=Apache%20httpd-2&query_format=specific&order=changeddate%20DESC%2Cpriority%2Cbug_severity&component=mod_http2">Problèmes connus</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&component=mod_http2">Signaler un bug</a></li></ul><h3>Voir aussi</h3>
<ul class="seealso">
<li><a href="#comments_section">Commentaires</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="how-it-works" id="how-it-works">Comment ça marche ?</a></h2>
<h3><a name="dimensioning" id="dimensioning">Quantification des ressources
supplémentaires nécessaires à HTTP/2</a></h3>
<p>
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.
</p>
<p>
HTTP/2 attribue à chaque requête qu'il reçoit son propre <em>thread
de travail</em> 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.
</p>
<p>
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 <code class="module"><a href="../mod/mod_status.html">mod_status</a></code>. De même, ils ne seront pas
pris en compte par les directives du style <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code>. Par contre, ils
utilisent par défaut la valeur de <code class="directive"><a href="../mod/mpm_common.html#threadsperchild">ThreadsPerChild</a></code> si vous n'avez pas
spécifié d'autres valeurs via <code class="directive"><a href="#h2minworkers">H2MinWorkers</a></code> et <code class="directive"><a href="#h2maxworkers">H2MaxWorkers</a></code>.
</p>
<p>
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 : <code class="directive"><a href="#h2maxsessionstreams">H2MaxSessionStreams</a></code>, <code class="directive"><a href="#h2windowsize">H2WindowSize</a></code> et <code class="directive"><a href="#h2streammaxmemsize">H2StreamMaxMemSize</a></code>.
</p>
<p>
La directive <code class="directive"><a href="#h2maxsessionstreams">H2MaxSessionStreams</a></code> 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.
</p>
<p>
La directive <code class="directive"><a href="#h2windowsize">H2WindowSize</a></code>
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.
</p>
<p>
En outre, la directive <code class="directive"><a href="#h2streammaxmemsize">H2StreamMaxMemSize</a></code> 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.
</p>
<h3><a name="misdirected" id="misdirected">Serveurs virtuels et requêtes mal
redirigées</a></h3>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
Dans le cas contraire, Apache httpd le détectera et renverra au
client un code de réponse spécial, 421 Misdirected Request.
</p>
<h3><a name="envvars" id="envvars">Variables d'environnement</a></h3>
<p>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
<code>%{VAR_NAME}e</code>).
</p>
<table class="bordered">
<tr>
<th><a name="table3">Nom variable :</a></th>
<th>Type :</th>
<th>Description :</th>
</tr>
<tr><td><code>HTTPe</code></td><td>drapeau</td><td>HTTP/2 est utilisé.</td></tr>
<tr><td><code>H2PUSH</code></td><td>drapeau</td><td>La
fonctionnalité HTTP/2 Server Push est activée pour cette requête et
supportée par le client.</td></tr>
<tr><td><code>H2_PUSH</code></td><td>drapeau</td><td>autre nom pour <code>H2PUSH</code></td></tr>
<tr><td><code>H2_PUSHED</code></td><td>chaîne</td><td>vide ou
<code>PUSHED</code> pour une requête pushée par le serveur.</td></tr>
<tr><td><code>H2_PUSHED_ON</code></td><td>nombre</td><td>numéro du
flux HTTP/2 qui a déclenché le push de cette requête.</td></tr>
<tr><td><code>H2_STREAM_ID</code></td><td>nombre</td><td>numéro du
flux HTTP/2 de cette requête.</td></tr>
<tr><td><code>H2_STREAM_TAG</code></td><td>chaîne</td><td>identifiant
de flux unique du processus HTTP/2 composé de l'identifiant de la
connexion et de l'identifiant du flux séparés par <code>-</code>.</td></tr>
</table>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2copyfiles" id="h2copyfiles">Directive</a> <a name="H2CopyFiles" id="H2CopyFiles">H2CopyFiles</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Contrôle la gestion des fichiers dans les réponses</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2CopyFiles on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2CopyFiles off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.24 du serveur HTTP
Apache.</td></tr>
</table>
<p>
Cette directive permet de définir la manière de gérer les
contenus de fichiers dans les réponses. Lorsqu'elle est à <code>off</code>
(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.
</p>
<p>
Lorsqu'elle est à <code>on</code>, 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.
</p>
<p>
Un exemple de ces modules tiers : <code>mod_wsgi</code> 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 <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> est probablement
encore loin d'en avoir fini avec eux.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2direct" id="h2direct">Directive</a> <a name="H2Direct" id="H2Direct">H2Direct</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Activation du protocole H2 Direct</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2Direct on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2Direct on pour h2c, off pour le protocole h2</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
</table>
<p>
Cette directive permet d'activer/désactiver
l'utilisation du mode HTTP/2 Direct. Elle doit être
située dans une section <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> afin d'activer la
communication directe HTTP/2 pour le serveur virtuel
considéré.
</p>
<p>
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.
</p>
<p>
Lorsque le protocole h2 ou h2c n'est pas activé via la
directive <code class="directive"><a href="../mod/core.html#protocols">Protocols</a></code>, la recherche d'un en-tête HTTP/2 n'est
jamais effectuée au sein d'une connexion. La directive
<code class="directive">H2Direct</code> 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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2Direct on</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2earlyhint" id="h2earlyhint">Directive</a> <a name="H2EarlyHint" id="H2EarlyHint">H2EarlyHint</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Ajoute un en-tête de réponse à consulter dans le code de
retour 103 Early Hints</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2EarlyHint <em>name</em> <em>value</em></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.58 du serveur HTTP
Apache.</td></tr>
</table>
<p>
La directive <code class="directive">H2EarlyHint</code> 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.
</p><p>
<em>name</em> et <em>value</em> doivent être des champs
d'en-tête HTTP valables sous peine de provoquer des échecs de
réponse. La directive <code class="directive">H2EarlyHints</code> 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.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2EarlyHint Link "</my.css>;rel=preload;as=style"</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2earlyhints" id="h2earlyhints">Directive</a> <a name="H2EarlyHints" id="H2EarlyHints">H2EarlyHints</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Contrôle l'envoi de codes d'état 103</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2EarlyHints on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2EarlyHints off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.24 du serveur HTTP
Apache.</td></tr>
</table>
<p>
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.
</p>
<p>
Lorsque cette directive est définie à <code>on</code>, les
ressources PUSHées définie par la directive <code class="directive"><a href="#h2pushresource">H2PushResource</a></code> déclenchent une
réponse intermédiaire 103 avant la réponse finale. Cette réponse
103 comporte des en-têtes <code>Link</code> qui provoquent le
<code>préchargement</code> des ressources considérées.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2maxdataframelen" id="h2maxdataframelen">Directive</a> <a name="H2MaxDataFrameLen" id="H2MaxDataFrameLen">H2MaxDataFrameLen</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre maximal d'octets dans une trame HTTP/2 DATA</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2MaxDataFrameLen <em>n</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2MaxDataFrameLen 0</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.58 du serveur HTTP
Apache.</td></tr>
</table>
<p>
La directive <code class="directive">H2MaxDataFrameLen</code> 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).
</p><p>
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.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2maxsessionstreams" id="h2maxsessionstreams">Directive</a> <a name="H2MaxSessionStreams" id="H2MaxSessionStreams">H2MaxSessionStreams</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre maximal de flux actifs par session HTTP/2.</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2MaxSessionStreams <em>n</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2MaxSessionStreams 100</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
</table>
<p>
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 <code>en attente</code> ni <code>fermé</code>.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2MaxSessionStreams 20</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2maxworkeridleseconds" id="h2maxworkeridleseconds">Directive</a> <a name="H2MaxWorkerIdleSeconds" id="H2MaxWorkerIdleSeconds">H2MaxWorkerIdleSeconds</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre maximal de secondes pendant lequel une unité de
traitement h2 pourra rester inactive sans être arrêtée.</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2MaxWorkerIdleSeconds <em>n</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2MaxWorkerIdleSeconds 600</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
</table>
<p>
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
<code class="directive"><a href="#h2minworkers">H2MinWorkers</a></code>.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2MaxWorkerIdleSeconds 20</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2maxworkers" id="h2maxworkers">Directive</a> <a name="H2MaxWorkers" id="H2MaxWorkers">H2MaxWorkers</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre maximal de threads à utiliser pour chaque processus
enfant.</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2MaxWorkers <em>n</em></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
</table>
<p>
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, <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>
choisira une valeur appropriée en fonction du module <code>mpm</code>
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,
<code>mod_http2</code> will chose a value suitable for the <code>mpm</code>
module loaded.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2MaxWorkers 20</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2minworkers" id="h2minworkers">Directive</a> <a name="H2MinWorkers" id="H2MinWorkers">H2MinWorkers</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Nombre minimal de threads à utiliser pour chaque processus
enfant.</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2MinWorkers <em>n</em></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
</table>
<p>
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, <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code>
choisira une valeur appropriée en fonction du module <code>mpm</code>
utilisé.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2MinWorkers 10</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2moderntlsonly" id="h2moderntlsonly">Directive</a> <a name="H2ModernTLSOnly" id="H2ModernTLSOnly">H2ModernTLSOnly</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Impose les connexions HTTP/2 en mode "TLS moderne"
seulement</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2ModernTLSOnly on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2ModernTLSOnly on</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.18 du serveur HTTP
Apache.</td></tr>
</table>
<p>
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 <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code>.
</p>
<p>
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.
</p>
<p>
Le nom provient des définitions Mozilla <a href="https://wiki.mozilla.org/Security/Server_Side_TLS">Security/Server
Side TLS</a> 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.
</p>
<p>
Un des buts de ces vérifications dans <code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> 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.
</p>
<p>
En fin de compte, la sécurité de la connexion TLS est déterminée
par les directives de configuration du serveur pour <code class="module"><a href="../mod/mod_ssl.html">mod_ssl</a></code>.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2ModernTLSOnly off</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2outputbuffering" id="h2outputbuffering">Directive</a> <a name="H2OutputBuffering" id="H2OutputBuffering">H2OutputBuffering</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Contrôle la mise en tampon du flux de sortie</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2OutputBuffering on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2OutputBuffering on</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.48 du serveur HTTP
Apache.</td></tr>
</table>
<p>
La directive <code class="directive">H2OutputBuffering</code> 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.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2padding" id="h2padding">Directive</a> <a name="H2Padding" id="H2Padding">H2Padding</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Spécifie un intervalle de nombres d'octets de bourrage à
ajouter aux trames utiles</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2Padding <em>numbits</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2Padding 0</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.39 du serveur HTTP
Apache.</td></tr>
</table>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2proxyrequests" id="h2proxyrequests">Directive</a> <a name="H2ProxyRequests" id="H2ProxyRequests">H2ProxyRequests</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active/Désactive les requêtes sous mandat direct via HTTP/2</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2ProxyRequests on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2ProxyRequests off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.58 du serveur HTTP
Apache</td></tr>
</table>
<p>
La directive <code class="directive">H2ProxyRequests</code> permet
d'activer ou de désactiver la gestion des requêtes HTTP/2 dans
un contexte de mandat direct.
</p><p>
Similaire à <code class="directive"><a href="../mod/proxy.html#proxyrequests">ProxyRequests</a></code>,
cette directive déclenche le traitement nécessaire des requêtes
lorsque HTTP/2 est activé dans un contexte de mandat direct.
</p><p>
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2push" id="h2push">Directive</a> <a name="H2Push" id="H2Push">H2Push</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Activation/désactivation du server push H2</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2Push on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2Push on</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.18 du serveur HTTP
Apache.</td></tr>
</table>
<p>
Cette directive permet d'activer/désactiver
l'utilisation de la fonctionnalité server push du
protocole HTTP/2.
</p>
<p>
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.
</p>
<p>
Les server pushes sont détectés en inspectant les
en-têtes <code>Link</code> 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 <code>rel=preload</code>, il est
considéré comme devant faire l'objet d'un push.
</p>
<p>
Les en-têtes link des réponses sont soit définis par
l'application, soit configurés via
<code class="directive"><a href="#h2pushresource">H2PushResource</a></code> ou
<code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code> comme suit :
</p>
<div class="example"><h3>Exemple de configuration d'en-tête link via mod_headers</h3><pre class="prettyprint lang-config"><Location /index.html>
Header add Link "</css/site.css>;rel=preload"
Header add Link "</images/logo.jpg>;rel=preload"
</Location></pre>
</div>
<p>
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.
</p>
<p>
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.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2Push off</pre>
</div>
<p>
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 <em>autorité</em> que celle de la
réponse originale.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2pushdiarysize" id="h2pushdiarysize">Directive</a> <a name="H2PushDiarySize" id="H2PushDiarySize">H2PushDiarySize</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille du journal des Pushes H2</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2PushDiarySize n</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2PushDiarySize 256</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.19 du serveur HTTP
Apache.</td></tr>
</table>
<p>
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 <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> afin de définir le nombre
de pushes pour le serveur virtuel considéré.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
Si cette directive est définie à 0, le journal des pushes est
désactivé.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2pushpriority" id="h2pushpriority">Directive</a> <a name="H2PushPriority" id="H2PushPriority">H2PushPriority</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Priorité des pushes H2</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2PushPriority <em>mime-type</em> [after|before|interleaved] [<em>weight</em>]</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2PushPriority * After 16</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>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.</td></tr>
</table>
<p>
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.
</p>
<p>
Les pushes HTTP/2 sont toujours liés à une requête client.
Chaque paire requête/réponse de cette sorte, ou <em>flux</em>,
possède une dépendance et un poids qui définissent la
<em>priorité</em> du flux.
</p>
<p>
Lorsqu'un flux <em>dépend</em> 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.
</p>
<p>
Lorsque plusieurs flux dépendent d'un même autre flux, disons X1
et X2 dépendent tous deux de Y, le <em>poids</em> 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.
</p>
<p>
En fin de compte, tout flux dépend du flux <em>racine</em> 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.
</p>
<p>
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.
</p>
<p>
Seul le fait de savoir qu'un flux implique un PUSH permet au
serveur de décider quelle est la priorité <em>initiale</em> 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.
</p>
<p>
La règle de priorité par défaut est :
</p>
<div class="example"><h3>Règle de priorité par défaut</h3><pre class="prettyprint lang-config">H2PushPriority * After 16</pre>
</div>
<p>
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.
</p>
<div class="example"><h3>Règle de priorité entrelacée</h3><pre class="prettyprint lang-config">H2PushPriority text/css Interleaved 256</pre>
</div>
<p>
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 : <code>P1ew
= Xw * (P1w / 256)</code>. 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.
</p>
<p>
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.
</p>
<div class="example"><h3>Règle de priorité Before</h3><pre class="prettyprint lang-config">H2PushPriority application/json Before</pre>
</div>
<p>
Dans cet exemple, tout flux PUSHé dont le contenu est de type
'application/json' sera envoyé <em>avant</em> 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.
</p>
<p>
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.
</p>
<p>
Enfin et surtout, il convient de tenir compte de certaines
particularités de la syntaxe de cette directive :
</p>
<ol>
<li>'*' est la seule expression permettant de remplacer tout
type de contenu. 'image/*' ne fonctionnera pas.</li>
<li>La dépendance par défaut est 'After'.</li>
<li>Il existe aussi des poids par défaut : pour 'After' le poids
est de 16, alors que pour 'interleaved' il est de 256.
</li>
</ol>
<div class="example"><h3>Exemples de règles</h3><pre class="prettyprint lang-config">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</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2pushresource" id="h2pushresource">Directive</a> <a name="H2PushResource" id="H2PushResource">H2PushResource</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Déclare des ressources à proposer ("pusher") au client</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2PushResource [add] <em>path</em> [critical]</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.24 du serveur HTTP
Apache.</td></tr>
</table>
<p>
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.
</p>
<p>
Cette directive propose des ressources beaucoup plus tôt que les
en-têtes <code>Link</code> de <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code>.
<code class="module"><a href="../mod/mod_http2.html">mod_http2</a></code> présente ces ressources au client via
une réponse intermédiaire <code>103 Early Hints</code>. Ceci
implique que les clients qui ne supportent pas PUSH recevront
quand-même rapidement des propositions de préchargement.
</p>
<p>
A la différence de la définition d'en-têtes de réponse
<code>Link</code> via <code class="module"><a href="../mod/mod_headers.html">mod_headers</a></code>, cette
directive n'aura d'effet que pour les connexions HTTP/2.
</p>
<p>
En ajoutant l'option <code>critical</code> à 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.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2serializeheaders" id="h2serializeheaders">Directive</a> <a name="H2SerializeHeaders" id="H2SerializeHeaders">H2SerializeHeaders</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active/désactive la sérialisation du traitement des
requêtes/réponses</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2SerializeHeaders on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2SerializeHeaders off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
</table>
<p>
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 <code>httpd</code>, ou si les données binaires reçues
doivent être passées directement aux <code>request_rec</code>s.
</p>
<p>
La sérialisation dégrade les performances, mais garantit une
meilleure compatibilité ascendante lorsque des filtres ou
programmes accroche personnalisés en ont besoin.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2SerializeHeaders on</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2streammaxmemsize" id="h2streammaxmemsize">Directive</a> <a name="H2StreamMaxMemSize" id="H2StreamMaxMemSize">H2StreamMaxMemSize</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Quantité maximale de données en sortie mises en tampon par
flux.</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2StreamMaxMemSize <em>bytes</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2StreamMaxMemSize 65536</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
</table>
<p>
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.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2StreamMaxMemSize 128000</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2streamtimeout" id="h2streamtimeout">Directive</a> <a name="H2StreamTimeout" id="H2StreamTimeout">H2StreamTimeout</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Temps d'attente maximum lors de l'envoi/réception de
données pour le traitement d'un flux</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2StreamTimeout <var>time-interval</var>[s]</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>La valeur de la directive <code class="directive"><a href="../mod/core.html#timeout">Timeout</a></code></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.55 du serveur HTTP
Apache.</td></tr>
</table>
<p>
<code class="directive">H2StreamTimeout</code> 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.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2tlscooldownsecs" id="h2tlscooldownsecs">Directive</a> <a name="H2TLSCoolDownSecs" id="H2TLSCoolDownSecs">H2TLSCoolDownSecs</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Durée d'inactivité d'une connexion TLS avant diminution de
la taille des paquets</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2TLSCoolDownSecs <em>seconds</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2TLSCoolDownSecs 1</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.18 du serveur HTTP
Apache.</td></tr>
</table>
<p>
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 <code class="directive"><a href="../mod/core.html#serveur virtuel"><serveur
virtuel></a></code> spécifique.
</p>
<p>
Voir la directive <code class="directive"><a href="#h2tlswarmupsize">H2TLSWarmUpSize</a></code> pour une description
du "préchauffage" de TLS. La directive <code class="directive">H2TLSCoolDownSecs</code> 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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2TLSCoolDownSecs 0</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2tlswarmupsize" id="h2tlswarmupsize">Directive</a> <a name="H2TLSWarmUpSize" id="H2TLSWarmUpSize">H2TLSWarmUpSize</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille des paquets durant la phase initiale de la connexion
TLS</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2TLSWarmUpSize <em>amount</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2TLSWarmUpSize 1048576</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.18 du serveur HTTP
Apache.</td></tr>
</table>
<p>
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 <code class="directive"><a href="../mod/core.html#serveurs virtuels"><Serveurs virtuels></a></code> spécifiques.
</p>
<p>
Les mesures effectuées par les <a href="https://www.igvita.com">laboratoires de performances de
Google</a> 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.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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".
</p>
<p>
Dans l'exemple suivant, la phase de chauffage est effectivement
désactivée en définissant la directive à 0.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2TLSWarmUpSize 0</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2upgrade" id="h2upgrade">Directive</a> <a name="H2Upgrade" id="H2Upgrade">H2Upgrade</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Activation/Désactivation du protocole de mise à jour H2</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2Upgrade on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2Upgrade on pour h2c, off pour h2</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel, répertoire, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
</table>
<p>
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 <code class="directive"><a href="../mod/core.html#virtualhost"><VirtualHost></a></code> afin d'activer la mise à
jour vers HTTP/2 pour le serveur virtuel considéré.
</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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 <code class="directive"><a href="#h2direct">H2Direct</a></code> pour
envisager une alternative à Upgrade.
</p>
<p>
Cette directive n'a d'effet que si h2 ou h2c est activé via la
directive <code class="directive"><a href="../mod/core.html#protocols">Protocols</a></code>.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2Upgrade on</pre>
</div>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2websockets" id="h2websockets">Directive</a> <a name="H2WebSockets" id="H2WebSockets">H2WebSockets</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Active/désactive les WebSockets via HTTP/2</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2WebSockets on|off</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2WebSockets off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibilité:</a></th><td>Disponible à partir de la version 2.4.58 du serveur HTTP
Apache</td></tr>
</table>
<p>
La directive <code class="directive">H2WebSockets</code> 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.
</p><p>
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.
</p><p>
Cela signifie que les WebSockets HTTP/2 peuvent être utilisés
dans le cadre d'une directive <code class="directive"><a href="../mod/mod_proxy.html#proxypass">ProxyPass</a></code> avec le paramètre
'upgrade=websocket' sans autres modifications.
</p><p>
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.
</p><p>
Cette fonctionnalité étant susceptible de briser la
compatibilité ascendante pour de tels modules tiers, elle n'est
pas activée par défaut.
</p>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="h2windowsize" id="h2windowsize">Directive</a> <a name="H2WindowSize" id="H2WindowSize">H2WindowSize</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Taille maximale des paquets de données pour les transmissions client
vers serveur.</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntaxe:</a></th><td><code>H2WindowSize <em>bytes</em></code></td></tr>
<tr><th><a href="directive-dict.html#Default">Défaut:</a></th><td><code>H2WindowSize 65535</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Contexte:</a></th><td>configuration globale, serveur virtuel</td></tr>
<tr><th><a href="directive-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_http2</td></tr>
</table>
<p>
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).
</p><p>
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.
</p>
<div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">H2WindowSize 128000</pre>
</div>
</div>
</div>
<div class="bottomlang">
<p><span>Langues Disponibles: </span><a href="../en/mod/mod_http2.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="../fr/mod/mod_http2.html" title="Français"> fr </a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />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 <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_http2.html';
(function(w, d) {
if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
d.write('<div id="comments_thread"><\/div>');
var s = d.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
(d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
}
else {
d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
}
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2024 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossaire</a> | <a href="../sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
prettyPrint();
}
//--><!]]></script>
</body></html>
|