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>