Requêtes HTTP

Une requête HTTP est adressée par un client à un hôte nommé, situé sur un serveur. L'objectif de la demande est d'accéder à une ressource sur le serveur.

Pour effectuer la demande, le client utilise les composants d'un URL (Uniform Resource Locator), qui contient les informations nécessaires pour accéder à la ressource. Les composants d'une URL expliquent les URL.

Une requête HTTP correctement composée contient les éléments suivants :
  1. Une ligne de demande.
  2. Une série d'en-têtes HTTP, ou champs d'en-tête.
  3. Un corps de message, si nécessaire.
Chaque en-tête HTTP est suivi d'un retour de chariot (CRLF). Après le dernier en-tête HTTP, un CRLF supplémentaire est utilisé (pour obtenir une ligne vide), puis le corps du message commence.

Ligne de demande

La ligne de demande est la première ligne du message de demande. Il se compose d'au moins trois éléments:
  1. Une méthode. La méthode est une commande d'un mot qui indique au serveur ce qu'il doit faire avec la ressource. Par exemple, le serveur peut être invité à envoyer la ressource au client.
  2. Le chemin d'accès à l' URL de la requête. Le chemin identifie la ressource sur le serveur.
  3. Le numéro de version HTTP, qui indique la spécification HTTP à laquelle le client a essayé de conformer le message.
Voici un exemple de ligne de demande:
GET /software/htp/cics/index.html HTTP/1.1
Dans cet exemple :
  • la méthode est GET
  • le chemin est /software/htp/cics/index.html
  • la version HTTP est HTTP/1.1
Une ligne de demande peut contenir des éléments supplémentaires:
  • Une chaîne de requête. Cela fournit une chaîne d'informations que la ressource peut utiliser à des fins. Il suit le chemin et est précédé d'un point d'interrogation.
  • Les composants schéma et hôte de l' URL, en plus du chemin d'accès. Lorsque l'emplacement de la ressource est spécifié de cette manière, il est connu sous le nom de formulaire d' URI absolu . Pour HTTP/1.1, ce formulaire est utilisé lorsqu'une requête passe par un serveur proxy. De même, pour HTTP/1.1, si le composant hôte de l' URL n'est pas inclus dans la ligne de requête, il doit être inclus dans le message dans un en-tête Host.

En-têtes HTTP

Les en-têtes HTTP sont écrits sur un message pour fournir au destinataire des informations sur le message, l'expéditeur et la manière dont l'expéditeur souhaite communiquer avec le destinataire. Chaque en-tête HTTP est composé d'un nom et d'une valeur. Les spécifications du protocole HTTP définissent l'ensemble standard des en-têtes HTTP et décrivent comment les utiliser correctement. Les messages HTTP peuvent également inclure des en-têtes d'extension, qui ne font pas partie des spécifications HTTP/1.1 ou HTTP/1.0.

Les en-têtes HTTP de la requête d'un client contiennent des informations que le serveur peut utiliser pour décider comment répondre à la requête. Par exemple, la série d'en-têtes suivante peut être utilisée pour indiquer que l'utilisateur souhaite uniquement lire le document demandé en français ou en allemand, et que le document ne doit être envoyé que s'il a été modifié depuis la date et l'heure de sa dernière acquisition par le client:
Accept-Language: fr, de
If-Modified-Since: Fri, 10 Dec 2004 11:22:13 GMT

Une ligne vide (c'est-à-dire un CRLF seul) est placée dans le message de requête après la série d'en-têtes HTTP, pour séparer les en-têtes du corps du message.

Corps du message

Le corps d'un message HTTP peut être appelé corps du message ou corps de l'entité. Techniquement, le corps de l'entité est le contenu réel du message. Le corps du message contient le corps de l'entité, qui peut être dans son état d'origine, ou peut être codé d'une manière ou d'une autre pour le transport, par exemple en étant fractionné en blocs (code de transfert fractionné). Le corps de message d'une demande peut être désigné par commodité comme corps de demande.

Les corps de message sont appropriés pour certaines méthodes de demande et inappropriés pour d'autres. Par exemple, une demande avec la méthode POST, qui envoie des données d'entrée au serveur, comporte un corps de message contenant les données. Une demande avec la méthode GET, qui demande au serveur d'envoyer une ressource, n'a pas de corps de message.