Hypertext Transfer Protocol (HTTP), en español se le conoce como protocolo de transferencia de hipertexto. Este es el protocolo usado en cada transacción de la World Wide Web y fue desarrollado por el World Wide Web Consortium y la Internet Engineering Task Force.
Este protocolo está orientando a transacciones y sigue el esquema petición respuesta entre un cliente y un servidor. al cliente que efectúa la petición (un navergador) se lo conoce como «user agent» (agente de usuario). A la información transmitica se la llama recurso y se identifica mediante un localizador uniforme de recursos (URL). Los recursos pueden ser archivos, el resultaod de la ejecución de un programa, una consulta a una base de datos, la traducción automática de un docuemento, etc…
Http es un protocolo sin estado, es decir, que no guarda información sobre conexiones anteriores. El desarrollo de aplicaciones web necesita frecuentemente manterner estado. Para esto se usan las cookies, que es la información que un cliente puede almacenar en el sistema cliente. Esto le permite a las aplicaciones web instituir la noción de «sesión» y también ermite rastrear usuarios ya que las cookies pueden guardarse en el cliente por tiempo indeterminado.
Transacciones HTTP
Una transacción HTTP está formada por un encabezado seguido, opcionalmente, por una línea en blanco y algún dato. En encabezado especificará cosas como la acción requerida del servidor, o el tipo de dator devuelto, o el código de estado.
El uso de campos de enacabezados enviados en las transacciones HTTP le dan gran flexibilidad al protocolo. Estos campos permiten que se envíe información descriptiva en la transacción, permitiendo así la autenticación, cifrado e identificación de usuario.
Un encabezado es un bloque de datos que precede a la información propiamente dicha, por loq ue muchas veces se hace referencia a él como metadato.
si se reciben líneas de encabezado del cliente, el servidor las coloca en las variables de entorno CGI con el prefijo HTTP_ seguido del nombre del encabezado. Cualquier carácter guión (-) del nombre del encabezado se convierte a caracteres «_».
El servidor puede excluir cualquier encabezado que ya esté procesado, como Authotization, Content-type y Content-length. El servidor puede elegir excluir a alguno o todos los encabezados, si incluirlos, si se excede algún límite del entorno de sistema. Ejemplos de esto son la s variables HTTP_ACCEPT y HTTP_USER_AGENT.
- HTTP_ACCEPT: Los tipos MiMe que el cliente aceptará, dados los encabezados HTTP. Otros protocolos quizás necesiten obtener esta información de otro lugar. Los elementos de esta lista deben estar separados por una coma, como se dice en la especificación HTTP.
- HTTP_USER_AGENT: El navegador que utiliza el cliente para realizar la petición. El formato general para esta variable es: software/versión biblioteca/versión.
El servidor envía al cliente:
- Un código de estado que indica si la petición fue correcta o no. Los códigos de error típicos indica que el archivo solicitado no se encontró, que la petición no se realizaó de forma correcta o que no se requiere autenticación para acceder al archivo.
- La información propiamente dicha. Como HTTP permite enviar documentos de todo tipo y formato, es ideal para transmitir multimedia, como gráficos, audio y video. Esta libertad es una de las mayores ventajas de HTTP.
- Información sobre el objeto que se devuelve.
Hay que tener en cuenta que algunos de los campos del encabezado solo tienen sentido en una dirección.
Ejemplo de un diálogo HTTP
Para obtener un recurso con el URL https://www.entreunosyceros.net
- Se abre una conexión en dirección al host www.entreunosyceros.hol.es, puerto 80 que es el puerto por defecto para HTTP.
- Se envía un mensaje parecido o del estilo de el siguiente;
GET /indes.html HTTP/1.1
Host: www.entreunosyceros.hol.es
User-Agent: nombre-cliente
[línea en blanco]
La respuesta del servidor está formada por encabezados seguidos del recurso solicitado, en caso de una página web:
HTTP/1.1 200 OK Date: Fri, 31 Dec 2003 23:59:59 GMT Content-Type: text/html Content-Length: 1221 <html> <body> <h1>Página principal de tuHost</h1> (Contenido) </body> </html>
Métodos de petición
HTTP define 8 métodos que indica la acción que desea que se efectúe sobre el recurso identificado. Lo que este recurso representa, si los datos pre-existentes o datos que se generan de forma dinámica, depende de la aplicación del servidor. A menudo, el recurso corresponde a un archivo o la salida de un ejecutable que residen en el servidor.
HEAD: Pide una respuesta idéntica a la que correspondería a una petición GET, pero sin el cuerpo de la respuesta. Esto es inútil para la recuperación de meta-información escrita en los encabezados de respuesta, sin tener que transportar todo el contenido.
GET: Pide una representación del recurso especificado. Por segudidad no debería ser usado por aplicaciones que causen efectos que ya transmite información a través de la URL agregando parámetros a la URL.
Ejemplo:
GET /images/logo.png HTTP/1.1 obtiene un recurso llamado logo.png
Ejemplo con parámetros:
/index.php?page=main&lang=es
POST: Envía los datos para que sean procesados por el recurso identificado. Los datos se incluirán en el cuerpo de la petición. Esto puede resultar en la creación de un nuevo recurso o de las actualizaciones de los recursos existentes o ambas cosas.
PUT: Sube, carga o realiza un upload de un recurso especificado (archivo), es el camino más eficiente para subir archivos a un servidor, esto es porque POST utiliza un mensaje multiparte y el mensaje es decodificado por el servidor. En contraste, el método PUT te permite escribir un archivo en una conexión socket establecida con el servidor.
La desventaja del método PUT es que los servidores de hosting compartido no lo tienen habilitado.
Ejemplo:
PUT /path/filename.html HTTP/1.1
DELETE: Borra el recurso especificado.
TRACE: Este método solicita al servidor que envíe de vuelta en un mensaje de respuesta, en la sección del cuerpo de entidad, toda la data que reciba del mensaje de solicitud. Se utiliza con fines de comprobación y diagnóstico.
OPTIONS: Devuelve los métodos HTTP que el servidor soporta para un URL específico. Esto puede ser utilizado para comprobar la funcionalidad de un servidor web mediante petición en lugar de un recurso específico.
CONNECT: Se
utiliza para saber si tiene acceso a un host, no necesariamente la petición llega al servidor, este método se utiliza principalmente para saber si un proxy nos da acceso a un host bajo condiciones especiales, como por ejemplo «corrientes» de datos bidireccionales encriptadas (como lo requiere SSL).