UP | HOME

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.

../medias/soc_IP_stack_connections.svg

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.

../medias/soc_UDP_encapsulation.svg

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.

Author: Hervé Grall
Version history: v1: 2016-10-24; v2: 2017-10-31.
Comments or questions: Send a mail.
The webpage content is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.