Test de sécurité - Réponses HTTP

Réponses HTTP

Après avoir reçu et interprété un message de demande, un serveur répond avec un message de réponse HTTP -

  • Une ligne d'état

  • Zéro ou plus de champs d'en-tête (Général | Réponse | Entité) 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 explique chacune des entités utilisées dans un message HTTP -

Ligne d'état des messages

La ligne d'état se compose de la version du protocole suivie d'un code d'état numérique et de sa phrase textuelle associée. Les éléments sont séparés par des caractères d'espace SP.

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

Discutons de chacune des parties mentionnées dans Status-Line.

Version HTTP

Un serveur prenant en charge HTTP version 1.1 renvoie les informations de version suivantes -

HTTP-Version = HTTP/1.1

Code d'état

L'élément Status-Code est un entier à 3 chiffres où le premier chiffre du Status-Code définit la classe de réponse et les deux derniers chiffres n'ont aucun rôle de catégorisation. Il y a cinq valeurs pour le premier chiffre -

S.No. Valeur et description
1

1xx: Informational

Cela signifie une demande reçue et un processus continu.

2

2xx: Success

Cela signifie que l'action a été reçue, comprise et acceptée avec succès.

3

3xx: Redirection

Cela signifie que des mesures supplémentaires doivent être prises afin de terminer la demande.

4

4xx: Client Error

Cela signifie que la requête contient une mauvaise syntaxe ou ne peut pas être satisfaite

5

5xx: Server Error

Le serveur n'a pas réussi à répondre à une demande apparemment valide

Les codes d'état HTTP sont extensibles et les applications HTTP ne sont pas obligées de comprendre la signification de tous les codes d'état enregistrés.

Champs d'en-tête de réponse

Les champs d'en-tête de réponse permettent au serveur de transmettre des informations supplémentaires sur la réponse qui ne peuvent pas être placées dans la ligne d'état. Ces champs d'en-tête donnent des informations sur le serveur et sur l'accès supplémentaire à la ressource identifiée par Request-URI.

  • Accept-Ranges
  • Age
  • ETag
  • Location
  • Proxy-Authenticate
  • Retry-After
  • Server
  • Vary
  • WWW-Authenticate

Vous pouvez introduire vos champs personnalisés au cas où vous souhaiteriez écrire votre propre client et serveur Web personnalisés.

Exemples de messages de réponse

Maintenant, mettons tout cela ensemble pour former une réponse HTTP pour une requête à récupérer hello.htm page du serveur Web s'exécutant sur tutorialspoint.com

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed

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

Voici un exemple de message de réponse HTTP indiquant une condition d'erreur lorsque le serveur Web n'a pas pu trouver une page demandée -

HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset = iso-8859-1
   
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
   <head>
      <title>404 Not Found</title>
   </head>

   <body>
      <h1>Not Found</h1>
      <p>The requested URL /t.html was not found on this server.</p>
   </body>
</html>

Voici un exemple de message de réponse HTTP indiquant une condition d'erreur lorsque le serveur Web a rencontré une mauvaise version HTTP dans une requête HTTP donnée -

HTTP/1.1 400 Bad Request
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Content-Type: text/html; charset = iso-8859-1
Connection: Closed
   
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
   <head>
      <title>400 Bad Request</title>
   </head>
   
   <body>
      <h1>Bad Request</h1>
      <p>Your browser sent a request that this server could not understand.<p>
      <p>The request line contained invalid characters following the protocol string.<p>
   </body>
</html>