Le protocole HTTP
Table of Contents
Le protocole HTTP ("Hypertext Transfer Protocol") est un protocole de la couche "applications", la couche la plus haute de la suite des protocoles Internet.
Suite des protocoles d'Internet (source : Wikipedia)
Initialement, il sert à échanger des documents hypertextuels, c'est-à-dire des documents textuels contenant des hyperliens. Aujourd'hui, son utilisation est beaucoup plus large : il sert à échanger des représentations de ressources, ces représentations pouvant contenir des hyperliens vers d'autres ressources.
On détaille ci-dessous la structure des messages échangés suivant ce protocole. Cette structure est enrichie progressivement à mesure qu'on descend la suite des protocoles Internet, comme le rappelle ce schéma.
Encapsulation progressive des données échangées
Pour de plus amples informations, consulter les normes spécifiant le protocole HTTP (version 1.1).
Un message HTTP comporte trois parties principales. On décrit aussi la représentation en Java des différents éléments.
Requête ou statut de la réponse
Requête
requête ::= méthode URI version
Méthodes
méthode ::= GET | POST | PUT | DELETE | ...
Ensemble extensible
Remarque : en Java, les méthodes HTTP sont représentées par des String.
URI (Uniform Resource Identifier)
URI ::= scheme://authority/path?query#fragment
Exemple : http://localhost:8080/projet/interface/methode?arg1=val&arg2=val2
Cf. la classe java.net.URI en Java.
Version
version ::= HTTP/N.n
Exemple : HTTP/1.1
Statut de la réponse
statut ::= version code [raison]
version ::= HTTP/N.n // déjà vu
code ::= entier à trois chiffres 1xx: Informational This means request received and continuing process. 2xx: Success This means the action was successfully received, understood, and accepted. 3xx: Redirection This means further action must be taken in order to complete the request. 4xx: Client Error This means the request contains bad syntax or cannot be fulfilled 5xx: Server Error The server failed to fulfill an apparently valid request
Cf. sur wikipedia les statuts.
Cf. classe javax.ws.rs.core.Response pour leur définition en Java.
raison ::= phrase explicative optionnelle
En-tête
Suite de couples nom : valeur
Quatre sortes de champs :
- généraux,
- dédiés aux requêtes,
- dédiés aux réponses,
- dédiés aux corps des messages.
Cf. sur wikipedia les en-têtes.
Cf. classe javax.ws.rs.core.HttpHeaders pour leur définition en Java
Corps
Corps du message (payload) : contenu proprement dit
Le corps est vide pour les requêtes GET et DELETE, non vides pour les requêtes PUT et POST.
Des en-têtes (optionnels) accompagnent fréquemment le corps et ensemble forment ce qu'on appelle l'entité du message.
content-type : type du contenu exprimé sous la forme d'un type "Internet Media Type" (dit, MIME (Multipurpose Internet Mail Extensions)
type/sous-type
Exemple : application/xml, application/json
Cf. la classe javax.ws.rs.core.MediaType.
- content-length : longueur du contenu
Ces informations doivent être cohérentes avec le contenu.