Programmation JEE/Le protocole HTTP
Les clients JEE utilisent le protocole HTTP pour communiquer avec un serveur JEE. HTTP définit les demandes qu'un client peut envoyer à un serveur et les réponses que le serveur peut envoyer en réponse. Chaque demande contient une URL, qui est une chaîne qui identifie un composant Web ou d'un objet statique, comme une page HTML ou un fichier image.
Le serveur JEE convertit une requête HTTP à un objet de requête HTTP et la remet à la composante Web identifiées par l'URL de requête. Le composant Web remplit un objet de réponse HTTP, le serveur qui convertit en réponse HTTP et l'envoie au client.
Requêtes HTTP
[modifier | modifier le wikicode]Exemple :
GET /page.html HTTP/1.0 Host: example.com Referer: http://example.com/ User-Agent: CERN-LineMode/2.15 libwww/2.17b3
Une requête HTTP se compose d'une méthode, une URL, les champs d'en-tête et un corps. HTTP 1.1 définit les méthodes demande suivante:
GET | Récupère la ressource identifiée par l'URL. |
HEAD | Retourne les en-têtes de la ressource identifiée par l'URL. |
POST | Envoi des données à traiter par la ressource spécifiée par l'URL. |
PUT | Stocker une ressource sous l'URL indiquée. |
DELETE | Supprime la ressource identifiée par l'URL. |
OPTIONS | Retourne les méthodes HTTP et options prises en charge par le serveur pour l'URL spécifiée. |
TRACE | Retourne les en-têtes envoyés avec demande de traces pour l'URL spécifiée. |
HTTP 1.0 ne comprend que les méthodes GET, HEAD et POST. Bien que les serveurs JEE n'ont besoin de supporter que le protocole HTTP 1.0, en pratique, de nombreux serveurs, y compris ceux du SDK JEE, prennent en charge HTTP 1.1.
Les réponses HTTP
[modifier | modifier le wikicode]Exemple :
HTTP/1.0 200 OK Date: Fri, 31 Dec 1999 23:59:59 GMT Server: Apache/0.8.4 Content-Type: text/html Content-Length: 59 Expires: Sat, 01 Jan 2000 00:59:59 GMT Last-modified: Fri, 09 Aug 1996 14:21:40 GMT <TITLE>Exemple</TITLE> <P>Ceci est une page d'exemple.</P>
Une réponse HTTP contient un code de résultat, les champs d'en-tête et un corps. Le protocole HTTP prévoit le code de résultat et de tous les champs d'en-tête à retourner avant tout le contenu du corps.
Certains codes d'état couramment utilisés sont les suivants:
- 200 : Indique que la ressource demandée à été trouvée
- 404 : Indique que la ressource demandée n'est pas disponible
- 401 : Indique que la demande requiert une authentification HTTP
- 500 : Indique une erreur dans le serveur HTTP qui a empêché de satisfaire la demande
- 503 : Indique que le serveur HTTP est temporairement surchargé, et incapable de gérer la demande
Contenu de la réponse
[modifier | modifier le wikicode]Le contenu de la réponse suit la liste des en-têtes HTTP.
Sa taille peut être connue à l'avance et spécifiée dans le champ Content-Length
.
C'est le cas des fichiers envoyés directement comme réponse (HTTP statique).
Pour les réponses dynamiques (générées par un script par exemple), la taille n'est pas connue à l'avance. Le serveur peut stocker en mémoire le contenu afin de connaitre la taille. Cependant ce stockage doit avoir une limite afin de ne pas être à cours de mémoire pour les réponses dynamiques de grande taille.
Dans ce cas, si le client le supporte, le serveur peut utiliser l'encodage en morceaux (chunked).
Le serveur ne spécifie pas la taille (donc pas de Content-Length
spécifié), et fournit le contenu au client par morceaux de taille fixe spécifiée avant chaque morceau.
Le dernier morceau comportant une taille nulle pour indiquer la fin de la réponse.