Protocole Apache JServ
# Protocole Apache JServ

Le protocole Apache JServ (Apache JServ Protocol en anglais, abrégé en AJP) est un protocole binaire qui permet de rediriger les connexions entrantes d'un serveur web vers un serveur d'applications qui se trouve derrière celui-ci.

AJP permet aussi de vérifier que le serveur web peut contacter le serveur d'applications au moyen d'un ping.

Les administrateurs utilisent souvent AJP comme un répartiteur de charge où un ou plusieurs serveurs web renvoient les requêtes vers un ou plusieurs serveurs d'applications. Les sessions sont redirigées vers le bon serveur d'applications en utilisant un mécanisme où chaque serveur d'applications se voit attribuer un nom (appelé une route).

AJP peut être utilisé sur le serveur web Apache 1.x en utilisant le module mod_jk. Dans Apache 2.2, on combine le mandataire AJP mod_proxy_ajp, mod_proxy et des modules de répartition de charge.

Alors que le serveur Apache est écrit en C, le serveur d'applications est généralement écrit en Java. Apache Tomcat et Jetty prennent tous deux AJP en charge. Le serveur d'applications WebObjects peut utiliser AJP sans déployer de servlet en utilisant LEWOAJPAdaptor de LEWOStuff.

## Fonctionnement du protocole

Un protocole orienté bit plutôt qu'un protocole en mode texte a été choisi probablement pour des raisons de performances.

Le serveur web communique avec le conteneur de servlets au moyen de connexions TCP. La même connexion est réutilisée pour plusieurs requêtes et réponses successives, mais une même connexion ne peut pas traiter plusieurs requêtes simultanées. L'en-tête HTTP est envoyé sous forme condensée, et s'il y a un corps à la requête HTTP (content-length > 0), il est envoyé dans un paquet séparé.

