HTTP - Messages

HTTP est basé sur le modèle d'architecture client-serveur et sur un protocole de demande / réponse sans état qui fonctionne en échangeant des messages via une connexion TCP / IP fiable.

Un "client" HTTP est un programme (navigateur Web ou tout autre client) qui établit une connexion à un serveur dans le but d'envoyer un ou plusieurs messages de requête HTTP. Un "serveur" HTTP est un programme (généralement un serveur Web comme Apache Web Server ou Internet Information Services IIS, etc.) qui accepte les connexions afin de servir les requêtes HTTP en envoyant des messages de réponse HTTP.

HTTP utilise l'identificateur de ressource uniforme (URI) pour identifier une ressource donnée et établir une connexion. Une fois la connexion établie,HTTP messagessont transmis dans un format similaire à celui utilisé par Internet Mail [RFC5322] et les Multipurpose Internet Mail Extensions (MIME) [RFC2045]. Ces messages comprennentrequests du client au serveur et responses du serveur au client qui aura le format suivant:

HTTP-message   = <Request> | <Response> ; HTTP/1.1 messages

Les requêtes HTTP et les réponses HTTP utilisent un format de message générique de la RFC 822 pour transférer les données requises. Ce format de message générique comprend les quatre éléments suivants.

  • A Start-line
  • Zero or more header fields followed by CRLF
  • An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
  • Optionally a message-body

Dans les sections suivantes, nous expliquerons chacune des entités utilisées dans un message HTTP.

Ligne de début de message

Une ligne de départ aura la syntaxe générique suivante:

start-line = Request-Line | Status-Line

Nous discuterons respectivement de Request-Line et Status-Line tout en discutant des messages de requête HTTP et de réponse HTTP. Pour l'instant, voyons les exemples de ligne de départ en cas de requête et de réponse:

GET /hello.htm HTTP/1.1     (This is Request-Line sent by the client)

HTTP/1.1 200 OK             (This is Status-Line sent by the server)

Champs d'en-tête

Les champs d'en-tête HTTP fournissent les informations requises sur la demande ou la réponse, ou sur l'objet envoyé dans le corps du message. Il existe quatre types d'en-têtes de message HTTP:

  • General-header: Ces champs d'en-tête ont une applicabilité générale pour les messages de demande et de réponse.

  • Request-header: Ces champs d'en-tête s'appliquent uniquement aux messages de demande.

  • Response-header: Ces champs d'en-tête s'appliquent uniquement aux messages de réponse.

  • Entity-header: Ces champs d'en-tête définissent des méta-informations sur le corps de l'entité ou, si aucun corps n'est présent, sur la ressource identifiée par la demande.

Tous les en-têtes mentionnés ci-dessus suivent le même format générique et chacun des champs d'en-tête se compose d'un nom suivi de deux points (:) et la valeur du champ comme suit:

message-header = field-name ":" [ field-value ]

Voici les exemples de différents champs d'en-tête:

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

Corps du message

La partie corps du message est facultative pour un message HTTP, mais si elle est disponible, elle est utilisée pour transporter le corps d'entité associé à la demande ou à la réponse. Si le corps de l'entité est associé, alors généralementContent-Type et Content-Length les lignes d'en-tête spécifient la nature du corps associé.

Un corps de message est celui qui transporte les données de requête HTTP réelles (y compris les données de formulaire et téléchargées, etc.) et les données de réponse HTTP du serveur (y compris les fichiers, les images, etc.). Vous trouverez ci-dessous le contenu simple d'un corps de message:

<html>
   <body>
   
      <h1>Hello, World!</h1>
   
   </body>
</html>

Les deux chapitres suivants utiliseront les concepts expliqués ci-dessus pour préparer les requêtes HTTP et les réponses HTTP.