Test de sécurité - Messages HTTP

Messages HTTP

HTTP est basé sur un modèle d'architecture client-serveur et 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, les messages HTTP sont transmis dans un format similaire à celui utilisé par la messagerie Internet [RFC5322] et les extensions de messagerie Internet polyvalentes (MIME) [RFC2045]. Ces messages sont constitués de requêtes du client au serveur et des réponses du serveur au client qui auront le format suivant -

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

La requête HTTP et la réponse 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 se compose des quatre éléments suivants -

  • Une ligne de départ

  • Zéro ou plusieurs champs d'en-tête suivis de CRLF

  • Une ligne vide (c'est-à-dire une ligne sans rien précédant le CRLF) indiquant la fin des champs d'en-tête

  • Facultativement un corps de message

La section suivante expliquera chacune des entités utilisées dans le 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 demande 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 suivants:

  • 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.

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 de la valeur du champ comme suit -

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

Voici les exemples de divers 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.). Voici un simple contenu d'un corps de message -

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