Desde 1990, el protocolo HTTP (Protocolo de transferencia de hipertexto) es el protocolo más utilizado en Internet. La versión 0.9 sólo tenía la finalidad de transferir los datos a través de Internet (en particular páginas Web escritas en HTML). La versión 1.0 del protocolo (la más utilizada) permite la transferencia de mensajes con encabezados que describen el contenido de los mensajes mediante la codificación MIME.
El propósito del protocolo HTTP es permitir la transferencia de archivos (principalmente, en formato HTML). entre un navegador (el cliente) y un servidor web (denominado, entre otros, httpd en equipos UNIX) localizado mediante una cadena de caracteres denominada dirección URL.
La comunicación entre el navegador y el servidor se lleva a cabo en dos etapas:
Una solicitud HTTP es un conjunto de líneas que el navegador envía al servidor. Incluye:
Por lo tanto, una solicitud HTTP posee la siguiente sintaxis (<crlf> significa retorno de carro y avance de línea):
MÉTODO VERSIÓN URL<crlf> ENCABEZADO: Valor<crlf> . . . ENCABEZADO: Valor<crlf> Línea en blanco <crlf> CUERPO DE LA SOLICITUD
A continuación se encuentra un ejemplo de una solicitud HTTP:
GET http://es.kioskea.net HTTP/1.0 Accept : Text/html If-Modified-Since : Saturday, 15-January-2000 14:37:11 GMT User-Agent : Mozilla/4.0 (compatible; MSIE 5.0; Windows 95)
| Comando | Descripción |
|---|---|
| GET | Solicita el recurso ubicado en la URL especificada |
| HEAD | Solicita el encabezado del recurso ubicado en la URL especificada |
| POST | Envía datos al programa ubicado en la URL especificada |
| PUT | Envía datos a la URL especificada |
| DELETE | Borra el recurso ubicado en la URL especificada |
| Nombre del encabezado | Descripción |
|---|---|
| Accept | Tipo de contenido aceptado por el navegador (por ejemplo, texto/html). Consulte Tipos de MIME |
| Accept-Charset | Juego de caracteres que el navegador espera |
| Accept-Encoding | Codificación de datos que el navegador acepta |
| Accept-Language | Idioma que el navegador espera (de forma predeterminada, inglés) |
| Authorization | Identificación del navegador en el servidor |
| Content-Encoding | Tipo de codificación para el cuerpo de la solicitud |
| Content-Language | Tipo de idioma en el cuerpo de la solicitud |
| Content-Length | Extensión del cuerpo de la solicitud |
| Content-Type | Tipo de contenido del cuerpo de la solicitud (por ejemplo, texto/html). Consulte Tipos de MIME |
| Date | Fecha en que comienza la transferencia de datos |
| Forwarded | Utilizado por equipos intermediarios entre el navegador y el servidor |
| From | Permite especificar la dirección de correo electrónico del cliente |
| From | Permite especificar que debe enviarse el documento si ha sido modificado desde una fecha en particular |
| Link | Vínculo entre dos direcciones URL |
| Orig-URL | Dirección URL donde se originó la solicitud |
| Referer | Dirección URL desde la cual se realizó la solicitud |
| User-Agent | Cadena con información sobre el cliente, por ejemplo, el nombre y la versión del navegador y el sistema operativo |
Una respuesta HTTP es un conjunto de líneas que el servidor envía al navegador. Está constituida por: Incluye:
Por lo tanto, una respuesta HTTP posee la siguiente sintaxis (<crlf> significa retorno de carro y avance de línea):
VERSIÓN-HTTP CÓDIGO EXPLICACIÓN <crlf> ENCABEZADO: Valor<crlf> . . . ENCABEZADO: Valor<crlf> Línea en blanco <crlf> CUERPO DE LA RESPUESTA
A continuación se encuentra un ejemplo de una respuesta HTTP:
HTTP/1.0 200 OK Date: Sat, 15 Jan 2000 14:37:12 GMT Server : Microsoft-IIS/2.0 Content-Type : text/HTML Content-Length : 1245 Last-Modified : Fri, 14 Jan 2000 08:25:13 GMT
| Nombre del encabezado | Descripción |
|---|---|
| Content-Encoding | Tipo de codificación para el cuerpo de la respuesta |
| Content-Language | Tipo de idioma en el cuerpo de la respuesta |
| Content-Length | Extensión del cuerpo de la respuesta |
| Content-Type | Tipo de contenido del cuerpo de la respuesta (por ejemplo, texto/html). Consulte Tipos de MIME |
| Date | Fecha en que comienza la transferencia de datos |
| Expires | Fecha límite de uso de los datos |
| Forwarded | Utilizado por equipos intermediarios entre el navegador y el servidor |
| Location | Redireccionamiento a una nueva dirección URL asociada con el documento |
| Server | Características del servidor que envió la respuesta |
Son los códigos que se ven cuando el navegador no puede mostrar la página solicitada. El código de respuesta está formado por tres dígitos: el primero indica el estado y los dos siguientes explican la naturaleza exacta del error.
| Código | Mensaje | Descripción |
|---|---|---|
| 10x | Mensaje de información | Estos códigos no se utilizan en la versión 1.0 del protocolo |
| 20x | Éxito | Estos códigos indican la correcta ejecución de la transacción |
| 200 | OK | La solicitud se llevó a cabo de manera correcta |
| 201 | CREATED | Sigue a un comando POST e indica el éxito, la parte restante del cuerpo indica la dirección URL donde se ubicará el documento creado recientemente. |
| 202 | ACCEPTED | La solicitud ha sido aceptada, pero el procedimiento que sigue no se ha llevado a cabo |
| 203 | PARTIAL INFORMATION | Cuando se recibe este código en respuesta a un comando de GET indica que la respuesta no está completa. |
| 204 | NO RESPONSE | El servidor ha recibido la solicitud, pero no hay información de respuesta |
| 205 | RESET CONTENT | El servidor le indica al navegador que borre el contenido en los campos de un formulario |
| 206 | PARTIAL CONTENT | Es una respuesta a una solicitud que consiste en el encabezado range. El servidor debe indicar el encabezado content-Range |
| 30x | Redirección | Estos códigos indican que el recurso ya no se encuentra en la ubicación especificada |
| 301 | MOVED | Los datos solicitados han sido transferidos a una nueva dirección |
| 302 | FOUND | Los datos solicitados se encuentran en una nueva dirección URL, pero, no obstante, pueden haber sido trasladados |
| 303 | METHOD | Significa que el cliente debe intentarlo con una nueva dirección; es preferible que intente con otro método en vez de GET |
| 304 | NOT MODIFIED | Si el cliente llevó a cabo un comando GET condicional (con la solicitud relativa a si el documento ha sido modificado desde la última vez) y el documento no ha sido modificado, este código se envía como respuesta. |
| 40x | Error debido al cliente | Estos códigos indican que la solicitud es incorrecta |
| 400 | BAD REQUEST | La sintaxis de la solicitud se encuentra formulada de manera errónea o es imposible de responder |
| 401 | UNAUTHORIZED | Los parámetros del mensaje aportan las especificaciones de formularios de autorización que se admiten. El cliente debe reformular la solicitud con los datos de autorización correctos |
| 402 | PAYMENT REQUIRED | El cliente debe reformular la solicitud con los datos de pago correctos |
| 403 | FORBIDDEN | El acceso al recurso simplemente se deniega |
| 404 | NOT FOUND | Un clásico. El servidor no halló nada en la dirección especificada. Se ha abandonado sin dejar una dirección para redireccionar... :) |
| 50x | Error debido al servidor | Estos códigos indican que existe un error interno en el servidor |
| 500 | INTERNAL ERROR | El servidor encontró una condición inesperada que le impide seguir con la solicitud (una de esas cosas que les suceden a los servidores...) |
| 501 | NOT IMPLEMENTED | El servidor no admite el servicio solicitado (no puede saberlo todo...) |
| 502 | BAD GATEWAY | El servidor que actúa como una puerta de enlace o proxy ha recibido una respuesta no válida del servidor al que intenta acceder |
| 503 | SERVICE UNAVAILABLE | El servidor no puede responder en ese momento debido a que se encuentra congestionado (todas las líneas de comunicación se encuentran congestionadas, inténtelo de nuevo más adelante) |
| 504 | GATEWAY TIMEOUT | La respuesta del servidor ha llevado demasiado tiempo en relación al tiempo de espera que la puerta de enlace podía admitir (excedió el tiempo asignado...) |
Para obtener más información sobre el protocolo HTTP, consulte la RFC (petición de comentarios)1945, que explica el protocolo en detalle: