1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head><!--
4        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5              This file is generated from xml source: DO NOT EDIT
6        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7      -->
8<title>mod_proxy_ajp - Serveur Apache HTTP</title>
9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11<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" />
12<script src="/style/scripts/prettify.min.js" type="text/javascript">
13</script>
14
15<link href="/images/favicon.ico" rel="shortcut icon" /></head>
16<body>
17<div id="page-header">
18<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>
19<p class="apache">Serveur Apache HTTP Version 2.4</p>
20<img alt="" src="/images/feather.gif" /></div>
21<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
22<div id="path">
23<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Serveur HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">Modules</a></div>
24<div id="page-content">
25<div id="preamble"><h1>Module Apache mod_proxy_ajp</h1>
26<div class="toplang">
27<p><span>Langues Disponibles: </span><a href="/en/mod/mod_proxy_ajp.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
28<a href="/fr/mod/mod_proxy_ajp.html" title="Fran�ais">&nbsp;fr&nbsp;</a> |
29<a href="/ja/mod/mod_proxy_ajp.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
30</div>
31<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Module de support AJP pour
32<code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code></td></tr>
33<tr><th><a href="module-dict.html#Status">Statut:</a></th><td>Extension</td></tr>
34<tr><th><a href="module-dict.html#ModuleIdentifier">Identificateur�de�Module:</a></th><td>proxy_ajp_module</td></tr>
35<tr><th><a href="module-dict.html#SourceFile">Fichier�Source:</a></th><td>mod_proxy_ajp.c</td></tr>
36<tr><th><a href="module-dict.html#Compatibility">Compatibilit�:</a></th><td>Disponible depuis la version 2.1 d'Apache</td></tr></table>
37<h3>Sommaire</h3>
38
39    <p>Ce module n�cessite le chargement de <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code>. Il fournit le support du <code>Protocole Apache
40    JServ version 1.3</code> (nomm� dans la suite de ce document
41    <em>AJP13</em>).</p>
42
43    <p>Pour �tre en mesure d'exploiter le protocole <code>AJP13</code>,
44    il est donc n�cessaire de charger les modules
45    <code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code> et <code class="module"><a href="/mod/mod_proxy_ajp.html">mod_proxy_ajp</a></code>.</p>
46
47    <div class="warning"><h3>Avertissement</h3>
48      <p>N'activez pas la fonctionnalit� de mandataire avant d'avoir <a href="mod_proxy.html#access">s�curis� votre serveur</a>. Les
49      serveurs mandataires ouverts sont dangereux non seulement pour
50      votre r�seau, mais aussi pour l'Internet au sens large. </p>
51    </div>
52</div>
53<div id="quickview"><h3 class="directives">Directives</h3>
54<p>Ce module ne fournit aucune directive.</p>
55<h3>Sujets</h3>
56<ul id="topics">
57<li><img alt="" src="/images/down.gif" /> <a href="#usage">Utilisation</a></li>
58<li><img alt="" src="/images/down.gif" /> <a href="#env">Variables d'environnement</a></li>
59<li><img alt="" src="/images/down.gif" /> <a href="#overviewprotocol">Vue d'ensemble du protocole</a></li>
60<li><img alt="" src="/images/down.gif" /> <a href="#basppacketstruct">Structure de base des paquets</a></li>
61<li><img alt="" src="/images/down.gif" /> <a href="#rpacetstruct">Structure des paquets de
62requ�te</a></li>
63<li><img alt="" src="/images/down.gif" /> <a href="#resppacketstruct">Structure du paquet de la
64r�ponse</a></li>
65</ul><h3>Voir aussi</h3>
66<ul class="seealso">
67<li><code class="module"><a href="/mod/mod_proxy.html">mod_proxy</a></code></li>
68<li><a href="/env.html">Documentation sur les variables
69d'environnement</a></li>
70</ul><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div>
71<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
72<div class="section">
73<h2><a name="usage" id="usage">Utilisation</a></h2>
74    <p>Ce module permet de mandater en inverse un serveur d'application
75    d'arri�re-plan (comme Apache Tomcat) qui utilise le protocole AJP13.
76    Son utilisation est similaire � celle d'un mandataire inverse HTTP,
77    mais s'appuie sur le prefixe <code>ajp://</code> :</p>
78
79    <div class="example"><h3>Mandataire inverse simple</h3><pre class="prettyprint lang-config">ProxyPass /app ajp://backend.example.com:8009/app</pre>
80</div>
81
82    <p>On peut aussi configurer un r�partiteur de charge :</p>
83    <div class="example"><h3>Mandataire inverse avec r�partiteur de charge</h3><pre class="prettyprint lang-config">&lt;Proxy balancer://cluster&gt;
84    BalancerMember ajp://app1.example.com:8009 loadfactor=1
85    BalancerMember ajp://app2.example.com:8009 loadfactor=2
86    ProxySet lbmethod=bytraffic
87&lt;/Proxy&gt;
88ProxyPass /app balancer://cluster/app</pre>
89</div>
90
91    <p>Notez qu'en g�n�ral, la directive <code class="directive"><a href="/mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> n'est pas
92    n�cessaire. La requ�te AJP inclut l'en-t�te host original fourni
93    au mandataire, et le serveur d'application est sens� g�n�rer des
94    en-t�tes auto-r�f�ren�ants relatifs � cet h�te ; aucune r��criture
95    n'est donc n�cessaire.</p>
96
97    <p>La situation la plus courante dans laquelle la directive <code class="directive"><a href="/mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> est n�cessaire se
98    rencontre lorsque le chemin de l'URL au niveau du mandataire est
99    diff�rente de celle du serveur d'arri�re-plan. Dans ce cas, un
100    en-t�te redirect peut �tre r��crit relativement � l'URL de l'h�te
101    original (et non du serveur d'arri�re-plan <code>ajp://</code> URL)
102    ; par exemple :</p>
103    <div class="example"><h3>R��criture d'un chemin mandat�</h3><pre class="prettyprint lang-config">ProxyPass /apps/foo ajp://backend.example.com:8009/foo
104ProxyPassReverse /apps/foo http://www.example.com/foo</pre>
105</div>
106    <p>Il est cependant pr�f�rable en g�n�ral de d�ployer l'application
107    sur le serveur d'arri�re-plan avec le m�me chemin que sur le
108    mandataire.
109    </p>
110</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
111<div class="section">
112<h2><a name="env" id="env">Variables d'environnement</a></h2>
113    <p>Les variables d'environnement dont le nom poss�de le pr�fixe
114    <code>AJP_</code> sont transmises au serveur original en tant
115    qu'attributs de requ�te AJP (le pr�fixe AJP_ �tant supprim� du nom
116    de la cl�).</p>
117</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
118<div class="section">
119<h2><a name="overviewprotocol" id="overviewprotocol">Vue d'ensemble du protocole</a></h2>
120    <p>Le protocole <code>AJP13</code> est orient� paquet. Le format
121    binaire a �t� pr�f�r�, probablement pour des raisons de
122    performances, au format texte pourtant plus lisible. Le serveur web
123    communique avec le conteneur de servlets sur une connexion TCP. Pour
124    diminuer la charge induite par le processus de cr�ation de socket,
125    le serveur web va tenter d'utiliser des connexions TCP persistantes
126    avec le conteneur de servlets, et de r�utiliser les connexions
127    pendant plusieurs cycles requ�tes/r�ponse.</p>
128    <p>Lorsqu'une connexion a �t� assign�e � une requ�te particuli�re,
129    elle ne sera utilis�e pour aucune autre jusqu'� ce que le cycle de
130    traitement de la requ�te se soit termin�. En d'autres termes, il n'y
131    a pas de multiplexage des requ�tes sur une connexion. Ceci se
132    traduit par un code beaucoup plus simple � chaque extr�mit� de la
133    connexion, un nombre plus important de connexions �tant cependant
134    ouvertes en m�me temps.</p>
135    <p>Lorsque le serveur web a ouvert une connexion vers le conteneur
136    de servlets, celle-ci peut se trouver dans l'un des �tats suivants
137    :</p>
138    <ul>
139    <li> Idle <br /> Aucune requ�te n'est trait�e sur cette
140    connexion. </li>
141    <li> Assigned <br /> La connexion fait l'objet d'un traitement de
142    requ�te.</li>
143    </ul>
144    <p>Lorsqu'une connexion est assign�e au traitement d'une requ�te
145    particuli�re, les informations de base de cette derni�re (comme les
146    en-t�tes HTTP, etc...) sont envoy�es sur la connexion sous une forme
147    tr�s condens�e (par exemple les cha�nes courantes sont cod�es sous
148    forme d'entiers). Vous trouverez des d�tails sur ce format plus
149    loin dans la structure des paquets de requ�te. Si la requ�te poss�de
150    un corps <code>(content-length &gt; 0)</code>, il est envoy� dans un
151    paquet s�par� imm�diatement apr�s.</p>
152    <p>A ce moment, le conteneur est probablement pr�t � traiter la
153    requ�te. Au cours de ce traitement, il peut renvoyer les messages
154    suivants au serveur web :</p>
155    <ul>
156    <li>SEND_HEADERS <br />Renvoie un jeu d'en-t�tes au navigateur.</li>
157    <li>SEND_BODY_CHUNK <br />Renvoie un tron�on de corps de requ�te au
158    navigateur.
159    </li>
160    <li>GET_BODY_CHUNK <br />Re�oit un autre tron�on de donn�es de la
161    requ�te si elle n'a pas encore �t� transmise int�gralement. Ce type
162    de transmission est n�cessaire car les paquets poss�dent une taille
163    maximale fixe, et des quantit�s quelconques de donn�es peuvent �tre
164    contenues dans le corps de la requ�te (pour un chargement de
165    fichier, par exemple). Notez que cela n'a rien � voir avec le
166    transfert HTTP fractionn�.</li>
167    <li>END_RESPONSE <br /> Termine le cycle du traitement de la
168    requ�te.</li>
169    </ul>
170    <p>Chaque message est associ� � un paquet de donn�es format�
171    diff�remment. Voir plus loin les structures des paquets de r�ponses
172    pour plus de d�tails.</p>
173</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
174<div class="section">
175<h2><a name="basppacketstruct" id="basppacketstruct">Structure de base des paquets</a></h2>
176    <p>Ce protocole h�rite en partie de XDR, mais il diff�re sur de
177    nombreux points (pas d'alignement sur 4 bits, par exemple).</p>
178    <p>Ordre des octets : je ne suis pas s�r du type endian des octets
179    individuels. Je suppose qu'ils sont de type little-endian, car cela
180    correspond � la sp�cification XDR, et je suppose aussi que la
181    biblioth�que sys/socket fonctionne ainsi automatiquement (du point
182    de vue du langage C). Il serait souhaitable que quelqu'un poss�dant
183    une meilleure connaissance des appels socket puisse prendre le
184    relai.</p>
185    <p>Le protocole comporte quatre types de donn�es : octets, bool�ens,
186    entiers et cha�nes de caract�res.</p>
187    <dl>
188    <dt><strong>Octet</strong></dt><dd>Un seul octet.</dd>
189    <dt><strong>Bool�en</strong></dt>
190      <dd>Un seul octet, <code>1 = vrai</code>, <code>0 = faux</code>.
191      L'utilisation d'autres valeurs non nulles (dans le style C) peut
192      fonctionner dans certains cas, mais pas dans certains autres..</dd>
193    <dt><strong>Entier</strong></dt>
194      <dd>Un nombre compris entre <code>0 et 2^16 (32768)</code>, stock�
195      sur 2 octets en d�butant par l'octet de poids forts.</dd>
196    <dt><strong>Cha�ne</strong></dt>
197      <dd>Une cha�ne de taille variable (longueur limit�e � 2^16). Elle
198      est cod�e comme suit : les deux premiers octets repr�sentent la
199      longueur de la cha�ne, les octets suivants constituent la cha�ne
200      proprement dite (y compris le '\0' final). Notez que la longueur
201      encod�e dans les deux premiers octets ne prend pas en compte le
202      '\0' final, de la m�me mani�re que <code>strlen</code>. Cela peut
203      pr�ter � confusion du point de vue de Java qui est surcharg� de
204      d�clarations d'autoincr�mentation �tranges destin�es � traiter
205      ces terminateurs. Je suppose que le but dans lequel cela a
206      �t� con�u ainsi �tait de permettre au code C d'�tre plus efficace
207      lors de la lecture de cha�nes en provenance du conteneur de
208      servlets -- avec le caract�re \0 final, le code C peut transmettre
209      des r�f�rences dans un seul tampon, sans avoir � effectuer de
210      copie. En l'absence du caract�re \0 final, le code C doit
211      effectuer une copie afin de pouvoir tenir compte de sa notion de
212      cha�ne.</dd>
213    </dl>
214
215  <h3>Taille du paquet</h3>
216    <p>Selon la majorit� du code, la taille maximale du paquet est de
217    <code>8 * 1024 bytes (8K)</code>. La taille r�elle du paquet est
218    encod�e dans l'en-t�te.</p>
219  
220  <h3>En-t�tes de paquet</h3>
221    <p>Les paquets envoy�s par le serveur vers le conteneur commencent
222    par <code>0x1234</code>. Les paquets envoy�s par le conteneur vers
223    le serveur commencent par <code>AB</code> (c'est � dire le code
224    ASCII de A suivi du code ASCII de B). Ensuite, vient un entier (cod�
225    comme ci-dessus) repr�sentant la longueur des donn�es transmises.
226    Bien que ceci puisse faire croire que la taille maximale des donn�es
227    est de 2^16, le code d�finit en fait ce maximum � 8K.</p>
228    <table>
229           
230      <tr>
231        <th colspan="6"><em>Format du paquet (Serveur-&gt;Conteneur)</em></th>
232      </tr>
233      <tr>
234        <th>Octet</th>
235        <td>0</td>
236        <td>1</td>
237        <td>2</td>
238        <td>3</td>
239        <td>4...(n+3)</td>
240      </tr>
241      <tr>
242        <th>Contenu</th>
243        <td>0x12</td>
244        <td>0x34</td>
245        <td colspan="2">Taille des donn�es (n)</td>
246        <td>Data</td>
247      </tr>
248    </table>
249    <table>
250       
251      <tr>
252        <th colspan="6"><em>Format du paquet
253	(Conteneur-&gt;Serveur)</em></th>
254      </tr>
255      <tr>
256        <th>Octet</th>
257        <td>0</td>
258        <td>1</td>
259        <td>2</td>
260        <td>3</td>
261        <td>4...(n+3)</td>
262      </tr>
263      <tr>
264        <th>Contenu</th>
265        <td>A</td>
266        <td>B</td>
267        <td colspan="2">Taille des donn�es (n)</td>
268        <td>Data</td>
269      </tr>
270    </table>
271    <p>Pour la plupart des paquets, le premier octet de la charge utile
272    encode le type de message, � l'exception des paquets contenant un
273    corps de requ�te envoy�s du serveur vers le conteneur -- ils
274    comportent un en-t�te standard (<code>0x1234</code> suivi de la taille
275    du paquet), mais celui-ci n'est suivi d'aucun pr�fixe.</p>
276     <p>Le serveur web peut envoyer les messages suivants au conteneur
277     de servlets :</p>
278    <table>
279       
280      <tr>
281        <td>Code</td>
282        <td>Type de paquet</td>
283        <td>Signification</td>
284      </tr>
285      <tr>
286        <td>2</td>
287        <td>Fait suivre la requ�te</td>
288        <td>D�bute le cycle de traitement de la requ�te avec les donn�es
289	qui suivent.</td>
290      </tr>
291      <tr>
292        <td>7</td>
293        <td>Arr�t</td>
294        <td>Le serveur web demande au conteneur de s'arr�ter.</td>
295      </tr>
296      <tr>
297        <td>8</td>
298        <td>Ping</td>
299        <td>Le serveur web demande au conteneur de prendre le contr�le
300	(phase de connexion s�curis�e).</td>
301      </tr>
302      <tr>
303        <td>10</td>
304        <td>CPing</td>
305        <td>Le serveur web demande au conteneur de r�pondre rapidement
306	avec un CPong.
307        </td>
308      </tr>
309      <tr>
310        <td>none</td>
311        <td>Donn�es</td>
312        <td>Taille (2 octets) et les donn�es correspondantes.</td>
313      </tr>
314    </table>
315    <p>� des fins de s�curit�, le conteneur n'effectuera r�ellement son
316    <code>Arr�t</code> que si la demande provient de la machine par
317    laquelle il est h�berg�.</p>
318    <p>Le premier paquet <code>Donn�es</code> est envoy� imm�diatement
319    apr�s le paquet <code>Faire suivre la requ�te</code> par le serveur
320    web.</p>
321    <p>Le conteneur de servlets peut envoyer les types de messages
322    suivants au serveur web :</p>
323    <table>
324       
325      <tr>
326        <td>Code</td>
327        <td>Type de paquet</td>
328        <td>Signification</td>
329      </tr>
330      <tr>
331        <td>3</td>
332        <td>Envoi d'un tron�on de corps</td>
333        <td>Envoi d'un tron�on de corps depuis le conteneur de servlets
334	vers le serveur web (et probablement vers le navigateur).</td>
335      </tr>
336      <tr>
337        <td>4</td>
338        <td>Envoie les en-t�tes</td>
339        <td>Envoi des en-t�tes de r�ponse depuis le conteneur de
340	servlets vers le serveur web (et probablement vers le
341	navigateur).</td>
342      </tr>
343      <tr>
344        <td>5</td>
345        <td>Fin de la r�ponse</td>
346        <td>Marque la fin de la r�ponse (et par cons�quent du cycle de
347	traitement de la requ�te).
348        </td>
349      </tr>
350      <tr>
351        <td>6</td>
352        <td>R�ception du tron�on de corps suivant</td>
353        <td>R�ception de la suite des donn�es de la requ�te si elles
354	n'ont pas encore �t� enti�rement transmises.</td>
355      </tr>
356      <tr>
357        <td>9</td>
358        <td>R�ponse CPong</td>
359        <td>La r�ponse � une requ�te CPing</td>
360      </tr>
361    </table>
362    <p>Chacun des messages ci-dessus poss�de une structure interne
363    diff�rente dont vous trouverez les d�tails ci-dessous.</p>
364  
365</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
366<div class="section">
367<h2><a name="rpacetstruct" id="rpacetstruct">Structure des paquets de
368requ�te</a></h2>
369    <p>Pour les messages de type <em>Faire suivre la requ�te</em> depuis
370    le serveur vers le conteneur :</p>
371    <div class="example"><pre>AJP13_FORWARD_REQUEST :=
372    prefix_code      (byte) 0x02 = JK_AJP13_FORWARD_REQUEST
373    method           (byte)
374    protocol         (string)
375    req_uri          (string)
376    remote_addr      (string)
377    remote_host      (string)
378    server_name      (string)
379    server_port      (integer)
380    is_ssl           (boolean)
381    num_headers      (integer)
382    request_headers *(req_header_name req_header_value)
383    attributes      *(attribut_name attribute_value)
384    request_terminator (byte) OxFF</pre></div>
385    <p>Les <code>request_headers</code> poss�dent la structure suivante
386    :
387    </p><div class="example"><pre>req_header_name :=
388    sc_req_header_name | (string)  [voir ci-dessous pour la mani�re dont
389    ceci est interpr�t�]
390
391sc_req_header_name := 0xA0xx (integer)
392
393req_header_value := (string)</pre></div>
394    <p>Les <code>attributes</code> sont optionnels et poss�dent la
395    structure suivante :</p>
396    <div class="example"><pre>attribute_name := sc_a_name | (sc_a_req_attribute string)
397
398attribute_value := (string)</pre></div>
399    <p>Un des en-t�tes les plus importants est
400    <code>content-length</code>, car il indique si le conteneur doit ou
401    non attendre un autre paquet imm�diatement.</p>
402  <h3>Description d�taill�e de la requ�te que le serveur
403  fait suivre vers le conteneur
404  </h3>
405  <h3>Pr�fixe de la requ�te</h3>
406    <p>Pour toutes les requ�tes, ce pr�fixe est 2. Voir ci-dessus pour
407    les d�tails des autres codes de pr�fixes.</p>
408  
409  <h3>M�thode</h3>
410    <p>La m�thode HTTP, encod�e sous la forme d'un seul octet :</p>
411    <table>
412      <tr><td>Nom commande</td><td>Code</td></tr>
413      <tr><td>OPTIONS</td><td>1</td></tr>
414      <tr><td>GET</td><td>2</td></tr>
415      <tr><td>HEAD</td><td>3</td></tr>
416      <tr><td>POST</td><td>4</td></tr>
417      <tr><td>PUT</td><td>5</td></tr>
418      <tr><td>DELETE</td><td>6</td></tr>
419      <tr><td>TRACE</td><td>7</td></tr>
420      <tr><td>PROPFIND</td><td>8</td></tr>
421      <tr><td>PROPPATCH</td><td>9</td></tr>
422      <tr><td>MKCOL</td><td>10</td></tr>
423      <tr><td>COPY</td><td>11</td></tr>
424      <tr><td>MOVE</td><td>12</td></tr>
425      <tr><td>LOCK</td><td>13</td></tr>
426      <tr><td>UNLOCK</td><td>14</td></tr>
427      <tr><td>ACL</td><td>15</td></tr>
428      <tr><td>REPORT</td><td>16</td></tr>
429      <tr><td>VERSION-CONTROL</td><td>17</td></tr>
430      <tr><td>CHECKIN</td><td>18</td></tr>
431      <tr><td>CHECKOUT</td><td>19</td></tr>
432      <tr><td>UNCHECKOUT</td><td>20</td></tr>
433      <tr><td>SEARCH</td><td>21</td></tr>
434      <tr><td>MKWORKSPACE</td><td>22</td></tr>
435      <tr><td>UPDATE</td><td>23</td></tr>
436      <tr><td>LABEL</td><td>24</td></tr>
437      <tr><td>MERGE</td><td>25</td></tr>
438      <tr><td>BASELINE_CONTROL</td><td>26</td></tr>
439      <tr><td>MKACTIVITY</td><td>27</td></tr>
440    </table>
441    <p>Les versions futures d'ajp13 pourront transmettre des m�thodes
442    suppl�mentaires, m�me si elles ne font pas partie de cette
443    liste.</p>
444  
445  <h3>protocol, req_uri, remote_addr, remote_host, server_name,
446  server_port, is_ssl</h3>
447    <p>Les significations de ces �l�ments sont triviales. Ils sont tous
448    obligatoires et seront envoy�s avec chaque requ�te.</p>
449  
450  <h3>En-t�tes</h3>
451    <p>La structure de <code>request_headers</code> est la suivante
452    : tout d'abord, le nombre d'en-t�tes <code>num_headers</code> est
453    encod�, suivi d'une liste de paires nom d'en-t�te
454    <code>req_header_name</code> / valeur <code>req_header_value</code>.
455    Les noms d'en-t�tes courants sont cod�s sous forme d'entiers afin de
456    gagner de la place. Si le nom d'en-t�te ne fait partie de la liste
457    des en-t�tes courants, il est encod� normalement (une cha�ne de
458    caract�res pr�fix�e par la taille). La liste des en-t�tes courants
459    <code>sc_req_header_name</code> avec leurs codes se pr�sente comme
460    suit (il sont tous sensibles � la casse) :</p>
461    <table>
462      <tr><td>Nom</td><td>Valeur du code</td><td>Nom du code</td></tr>
463      <tr><td>accept</td><td>0xA001</td><td>SC_REQ_ACCEPT</td></tr>
464      <tr><td>accept-charset</td><td>0xA002</td><td>SC_REQ_ACCEPT_CHARSET
465      </td></tr>
466      <tr><td>accept-encoding</td><td>0xA003</td><td>SC_REQ_ACCEPT_ENCODING
467      </td></tr>
468      <tr><td>accept-language</td><td>0xA004</td><td>SC_REQ_ACCEPT_LANGUAGE
469      </td></tr>
470      <tr><td>authorization</td><td>0xA005</td><td>SC_REQ_AUTHORIZATION</td>
471      </tr>
472      <tr><td>connection</td><td>0xA006</td><td>SC_REQ_CONNECTION</td></tr>
473      <tr><td>content-type</td><td>0xA007</td><td>SC_REQ_CONTENT_TYPE</td>
474      </tr>
475      <tr><td>content-length</td><td>0xA008</td><td>SC_REQ_CONTENT_LENGTH</td>
476      </tr>
477      <tr><td>cookie</td><td>0xA009</td><td>SC_REQ_COOKIE</td></tr>
478      <tr><td>cookie2</td><td>0xA00A</td><td>SC_REQ_COOKIE2</td></tr>
479      <tr><td>host</td><td>0xA00B</td><td>SC_REQ_HOST</td></tr>
480      <tr><td>pragma</td><td>0xA00C</td><td>SC_REQ_PRAGMA</td></tr>
481      <tr><td>referer</td><td>0xA00D</td><td>SC_REQ_REFERER</td></tr>
482      <tr><td>user-agent</td><td>0xA00E</td><td>SC_REQ_USER_AGENT</td></tr>
483    </table>
484    <p>Le code Java qui lit ceci extrait l'entier repr�sent� par les
485    deux premiers octets, et si le premier octet est
486    <code>'0xA0'</code>, il utilise l'entier repr�sent� par le deuxi�me
487    octet comme index d'un tableau de noms d'en-t�tes. Si le premier
488    octet n'est pas <code>0xA0</code>, l'entier repr�sent� par les deux
489    octets est consid�r� comme la longueur d'une cha�ne qui est alors
490    lue.</p>
491    <p>Ceci ne peut fonctionner que si aucun nom d'en-t�te ne poss�de
492    une taille sup�rieure � <code>0x9999 (==0xA000 - 1)</code>, ce qui
493    est vraisemblable, bien qu'un peu arbitraire.</p>
494    <div class="note"><h3>Note:</h3>
495    L'en-t�te <code>content-length</code> est extr�mement important.
496    S'il est pr�sent et non nul, le conteneur consid�re que la requ�te
497    poss�de un corps (une requ�te POST, par exemple), et lit
498    imm�diatement le paquet suivant dans le flux d'entr�e pour extraire
499    ce corps.
500    </div>
501  
502  <h3>Attributs</h3>
503    <p>Les attributs pr�fix�s par <code>?</code> (par exemple
504    <code>?context</code>) sont tous optionnels. Chacun d'eux est
505    repr�sent� par un octet correspondant au type de l'attribut et par
506    sa valeur (cha�ne ou entier). Ils peuvent �tre envoy�s dans un ordre
507    quelconque (bien que le code C les envoie dans l'ordre ci-dessous).
508    Un code de terminaison sp�cial est envoy� pour signaler la fin de la
509    liste des attributs optionnels. La liste des codes est la suivante
510    :</p>
511    <table>
512      <tr><td>Information</td><td>Valeur code</td><td>Type de valeur</td><td>Note</td></tr>
513      <tr><td>?context</td><td>0x01</td><td>-</td><td>Non impl�ment�
514      actuellement
515      </td></tr>
516      <tr><td>?servlet_path</td><td>0x02</td><td>-</td><td>Non impl�ment�
517      actuellement
518      </td></tr>
519      <tr><td>?remote_user</td><td>0x03</td><td>String</td><td /></tr>
520      <tr><td>?auth_type</td><td>0x04</td><td>String</td><td /></tr>
521      <tr><td>?query_string</td><td>0x05</td><td>String</td><td /></tr>
522      <tr><td>?jvm_route</td><td>0x06</td><td>String</td><td /></tr>
523      <tr><td>?ssl_cert</td><td>0x07</td><td>String</td><td /></tr>
524      <tr><td>?ssl_cipher</td><td>0x08</td><td>String</td><td /></tr>
525      <tr><td>?ssl_session</td><td>0x09</td><td>String</td><td /></tr>
526      <tr><td>?req_attribute</td><td>0x0A</td><td>String</td><td>Nom (le
527      nom de l'attribut vient ensuite)</td></tr>
528      <tr><td>?ssl_key_size</td><td>0x0B</td><td>Integer</td><td /></tr>
529      <tr><td>are_done</td><td>0xFF</td><td>-</td><td>request_terminator</td></tr>
530    </table>
531    <p><code>context</code> et <code>servlet_path</code> ne sont pas
532    d�finis actuellement par le code C, et la majorit� du code Java
533    ignore compl�tement ce qui est envoy� par l'interm�diaire de ces
534    champs (il va m�me parfois s'interrompre si une cha�ne est
535    envoy�e apr�s un de ces codes). Je ne sais pas si c'est une bogue ou
536    une fonctionnalit� non impl�ment�e, ou tout simplement du code
537    obsol�te, mais en tout cas, il n'est pris en charge par aucune des
538    deux extr�mit�s de la connexion.</p>
539    <p><code>remote_user</code> et <code>auth_type</code> concernent
540    probablement l'authentification au niveau HTTP, et contiennent le
541    nom de l'utilisateur distant ainsi que le type d'authentification
542    utilis�e pour �tablir son identit� (� savoir Basic, Digest).</p>
543    <p><code>query_string</code>, <code>ssl_cert</code>,
544    <code>ssl_cipher</code> et <code>ssl_session</code> contiennent les
545    �l�ments HTTP et HTTPS correspondants.</p>
546    <p><code>jvm_route</code> est utilis� dans le cadre des sessions
547    persistantes, en associant une session utilisateur � une instance
548    Tomcat particuli�re en pr�sence de plusieurs r�partiteurs de
549    charge.</p>
550    <p>Au del� de cette liste de base, tout autre attribut
551    suppl�mentaire peut �tre envoy� via le code
552    <code>req_attribute</code> <code>0x0A</code>. Une paire de cha�nes
553    repr�sentant le nom et la valeur de l'attribut est envoy�e
554    imm�diatement apr�s chaque instance de ce code. Les variables
555    d'environnement sont transmises par cette m�thode.</p>
556    <p>Enfin, lorsque tous les attributs ont �t� transmis, le
557    terminateur d'attributs, <code>0xFF</code>, est envoy�. Ce dernier
558    indique � la fois la fin de la liste d'attributs et la fin du paquet
559    de la requ�te</p>
560  
561</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
562<div class="section">
563<h2><a name="resppacketstruct" id="resppacketstruct">Structure du paquet de la
564r�ponse</a></h2>
565    <p>Pour les messages que le conteneur peut renvoyer au
566    serveur.</p>
567    <div class="example"><pre>AJP13_SEND_BODY_CHUNK :=
568  prefix_code   3
569  chunk_length  (integer)
570  chunk        *(byte)
571  chunk_terminator (byte) Ox00
572
573
574AJP13_SEND_HEADERS :=
575  prefix_code       4
576  http_status_code  (integer)
577  http_status_msg   (string)
578  num_headers       (integer)
579  response_headers *(res_header_name header_value)
580
581res_header_name :=
582    sc_res_header_name | (string)   [voir ci-dessous pour la mani�re
583    dont ceci est interpr�t�]
584
585sc_res_header_name := 0xA0 (byte)
586
587header_value := (string)
588
589AJP13_END_RESPONSE :=
590  prefix_code       5
591  reuse             (boolean)
592
593
594AJP13_GET_BODY_CHUNK :=
595  prefix_code       6
596  requested_length  (integer)</pre></div>
597  <h3>D�tails:</h3>
598  <h3>Envoi d'un tron�on de corps</h3>
599    <p>Le tron�on se compose essentiellement de donn�es binaires et est
600    renvoy� directement au navigateur.</p>
601  
602  <h3>Envoi des en-t�tes</h3>
603    <p>Les code et message d'�tat correspondent aux code et message HTTP
604    habituels (par exemple <code>200</code> et <code>OK</code>). Les
605    noms d'en-t�tes de r�ponses sont cod�s de la m�me fa�on que les noms
606    d'en-t�tes de requ�tes. Voir ci-dessus le codage des en-t�tes pour
607    plus de d�tails � propos de la mani�re dont les codes se distinguent
608    des cha�nes.<br />
609    Les codes des en-t�tes courants sont ::</p>
610    <table>
611      <tr><td>Nom</td><td>Valeur code</td></tr>
612      <tr><td>Content-Type</td><td>0xA001</td></tr>
613      <tr><td>Content-Language</td><td>0xA002</td></tr>
614      <tr><td>Content-Length</td><td>0xA003</td></tr>
615      <tr><td>Date</td><td>0xA004</td></tr>
616      <tr><td>Last-Modified</td><td>0xA005</td></tr>
617      <tr><td>Location</td><td>0xA006</td></tr>
618      <tr><td>Set-Cookie</td><td>0xA007</td></tr>
619      <tr><td>Set-Cookie2</td><td>0xA008</td></tr>
620      <tr><td>Servlet-Engine</td><td>0xA009</td></tr>
621      <tr><td>Status</td><td>0xA00A</td></tr>
622      <tr><td>WWW-Authenticate</td><td>0xA00B</td></tr>
623    </table>
624    <p>La valeur de l'en-t�te est cod�e imm�diatement apr�s le code ou
625    la cha�ne du nom d'en-t�te.</p>
626  
627  <h3>Fin de la r�ponse</h3>
628    <p>Signale la fin de ce cycle de traitement de requ�te. Si le
629    drapeau <code>reuse</code> est � true <code>(==1)</code>, cette
630    connexion TCP peut �tre r�utilis�e pour traiter de nouvelles
631    requ�tes entrantes. Si <code>reuse</code> est � false (toute autre
632    valeur que 1 dans le v�ritable code C), la connexion sera
633    ferm�e.</p>
634  
635  <h3>R�ception d'un tron�on de corps</h3>
636    <p>Le conteneur r�clame la suite des donn�es de la requ�te (dans le
637    cas o� la taille du corps �tait trop importante pour pouvoir �tre
638    contenue dans le premier paquet envoy�, o� lorsque la requ�te est
639    fractionn�e). Le serveur va alors envoyer un paquet contenant une
640    quantit� de donn�es correspondant au minimum de la
641    <code>request_length</code>, la taille maximale de corps envoy�e
642    <code>(8186 (8 Koctets - 6))</code>, et le nombre r�el d'octets
643    restants � envoyer pour ce corps de requ�te.<br />
644    S'il ne reste plus de donn�es � transmettre pour ce corps de requ�te
645    (c'est � dire si le conteneur de servlets tente de lire au del� de
646    la fin du corps), le serveur va renvoyer un paquet <em>vide</em>
647    dont la charge utile est de longueur 0 et se pr�sentant sous la
648    forme <code>(0x12,0x34,0x00,0x00)</code>.</p>
649  
650</div>
651</div>
652<div class="bottomlang">
653<p><span>Langues Disponibles: </span><a href="/en/mod/mod_proxy_ajp.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
654<a href="/fr/mod/mod_proxy_ajp.html" title="Fran�ais">&nbsp;fr&nbsp;</a> |
655<a href="/ja/mod/mod_proxy_ajp.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
656</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&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again 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 Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
657<script type="text/javascript"><!--//--><![CDATA[//><!--
658var comments_shortname = 'httpd';
659var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_proxy_ajp.html';
660(function(w, d) {
661    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
662        d.write('<div id="comments_thread"><\/div>');
663        var s = d.createElement('script');
664        s.type = 'text/javascript';
665        s.async = true;
666        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
667        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
668    }
669    else { 
670        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
671    }
672})(window, document);
673//--><!]]></script></div><div id="footer">
674<p class="apache">Copyright 2014 The Apache Software Foundation.<br />Autoris� sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
675<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[//><!--
676if (typeof(prettyPrint) !== 'undefined') {
677    prettyPrint();
678}
679//--><!]]></script>
680</body></html>