Pruebas de seguridad: respuestas HTTP

Respuestas HTTP

Después de recibir e interpretar un mensaje de solicitud, un servidor responde con un mensaje de respuesta HTTP:

  • Una línea de estado

  • Cero o más campos de encabezado (General | Respuesta | Entidad) seguidos de CRLF

  • Una línea vacía (es decir, una línea sin nada antes de la CRLF) que indica el final de los campos del encabezado

  • Opcionalmente un cuerpo de mensaje

La siguiente sección explica cada una de las entidades utilizadas en un mensaje HTTP:

Línea de estado del mensaje

La línea de estado consta de la versión del protocolo seguida de un código de estado numérico y su frase textual asociada. Los elementos están separados por caracteres SP de espacio.

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

Analicemos cada una de las partes mencionadas en Status-Line.

Versión HTTP

Un servidor compatible con HTTP versión 1.1 devuelve la siguiente información de versión:

HTTP-Version = HTTP/1.1

Código de estado

El elemento Status-Code es un número entero de 3 dígitos donde el primer dígito del Status-Code define la clase de respuesta y los dos últimos dígitos no tienen ningún rol de categorización. Hay cinco valores para el primer dígito:

S.No. Valor y descripción
1

1xx: Informational

Esto significa solicitud recibida y proceso continuo.

2

2xx: Success

Esto significa que la acción se recibió, comprendió y aceptó correctamente.

3

3xx: Redirection

Esto significa que se deben realizar más acciones para completar la solicitud.

4

4xx: Client Error

Esto significa que la solicitud contiene una sintaxis incorrecta o no se puede cumplir.

5

5xx: Server Error

El servidor no cumplió con una solicitud aparentemente válida

Los códigos de estado HTTP son extensibles y no se requieren aplicaciones HTTP para comprender el significado de todos los códigos de estado registrados.

Campos de encabezado de respuesta

Los campos de encabezado de respuesta permiten al servidor pasar información adicional sobre la respuesta que no se puede colocar en la línea de estado. Estos campos de encabezado brindan información sobre el servidor y sobre el acceso adicional al recurso identificado por el Request-URI.

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

Puede introducir sus campos personalizados en caso de que desee escribir su propio servidor y cliente web personalizado.

Ejemplos de mensajes de respuesta

Ahora pongámoslo todo junto para formar una respuesta HTTP para una solicitud para obtener hello.htm página desde el servidor web que se ejecuta en 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>

A continuación se muestra un ejemplo de mensaje de respuesta HTTP que muestra una condición de error cuando el servidor web no pudo encontrar una página solicitada:

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>

A continuación se muestra un ejemplo de mensaje de respuesta HTTP que muestra una condición de error cuando el servidor web encontró una versión HTTP incorrecta en una solicitud HTTP determinada:

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>