# Programmation JEE/Le protocole HTTP

* Présentation du JEE
* Le protocole HTTP
* Servlets
* Portlets
* JSP
* JSF
* JSTL
* JDBC
* EJB
* WildFly
* Configurer Eclipse
* Parcourir une API
Modifier ce modèle
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

Exemple :
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

Exemple :
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

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.