HTTP: respuestas
Después de recibir e interpretar un mensaje de solicitud, un servidor responde con un mensaje de respuesta HTTP:
- A Status-line
- Zero or more header (General|Response|Entity) fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
Las siguientes secciones explican cada una de las entidades utilizadas en un mensaje de respuesta HTTP.
Línea de estado del mensaje
Una 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
Versión HTTP
Un servidor que admita HTTP versión 1.1 devolverá 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 5 valores para el primer dígito:
SN | Código y descripción |
---|---|
1 | 1xx: Informational Significa que se recibió la solicitud y el proceso continúa. |
2 | 2xx: Success Significa que la acción se recibió, comprendió y aceptó con éxito. |
3 | 3xx: Redirection Significa que se deben tomar más medidas para completar la solicitud. |
4 | 4xx: Client Error Significa que la solicitud contiene una sintaxis incorrecta o que no se puede cumplir. |
5 | 5xx: Server Error Significa que 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. En un capítulo separado se proporciona una lista de todos los códigos de estado para su referencia.
Campos de encabezado de respuesta
Estudiaremos General-header y Entity-header en un capítulo separado cuando aprendamos los campos de encabezado HTTP. Por ahora, verifiquemos qué son los 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 vaya a escribir su propio servidor y cliente web personalizado.
Ejemplos de mensaje de respuesta
Ahora pongámoslo todo junto para formar una respuesta HTTP para una solicitud para obtener el 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>
El siguiente ejemplo muestra un mensaje de respuesta HTTP que muestra una condición de error cuando el servidor web no pudo encontrar la 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 la solicitud HTTP dada:
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>