HTTP
Hypertext
Transfer Protocol o HTTP (en español protocolo de transferencia de hipertexto) es el protocolo
usado en cada transacción de la World Wide Web. HTTP fue desarrollado por el World Wide Web
Consortium y la Internet
Engineering Task Force, colaboración que culminó en 1999 con la
publicación de una serie de RFC, el más
importante de ellos es el RFC 2616 que especifica la versión 1.1. HTTP
define la sintaxis y la semántica que utilizan los elementos de software de la
arquitectura web (clientes, servidores, proxies)
para comunicarse. Es un protocolo orientado a transacciones y sigue el esquema
petición-respuesta entre un cliente y un servidor. Al cliente que efectúa la
petición (un navegador web o un spider) se lo conoce como "user agent"
(agente del usuario). A la información transmitida se la llama recurso y se la
identifica mediante un localizador
uniforme de recursos (URL). Los recursos pueden ser archivos, el
resultado de la ejecución de un programa, una consulta a una base de datos, la traducción automática de un
documento, etc.
HTTP es un protocolo sin estado,
es decir, que no guarda ninguna información sobre conexiones anteriores. El
desarrollo de aplicaciones web necesita frecuentemente mantener estado. Para
esto se usan las cookies, que
es información que un servidor puede almacenar en el sistema cliente. Esto le
permite a las aplicaciones web instituir la noción de "sesión", y
también permite 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. El encabezado especificará cosas como la acción requerida
del servidor, o el tipo de dato retornado, o el código de estado.
El uso de
campos de encabezados 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 lo que muchas veces se hace referencia a él como metadato —porque tiene datos sobre los datos—.
Si se
reciben líneas de encabezado del cliente, el servidor las coloca en las
variables de entorno de CGI con el
prefijo HTTP_ seguido del nombre del encabezado. Cualquier carácter guion ( - )
del nombre del encabezado se convierte a caracteres "_".
El servidor
puede excluir cualquier encabezado que ya esté procesado, como Authorization,
Content-type y Content-length. El servidor puede elegir excluir
alguno o todos los encabezados, si incluirlos, si se excede algún límite del
entorno de sistema. Ejemplos de esto son las 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: tipo, tipo.
- 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 indican que
el archivo solicitado no se encontró, que la petición no se realizó de
forma correcta o que 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 retorna.
Hay que
tener en cuenta que la lista no es una lista completa de los campos de
encabezado y que todos ellos sólo tienen sentido en una dirección.
Versiones
HTTP ha
pasado por múltiples versiones del protocolo, muchas de las cuales son
compatibles con las anteriores. El RFC 2145 describe el uso de los números de
versión de HTTP. El cliente le dice al servidor al principio de la petición la
versión que usa, y el servidor usa la misma o una anterior en su respuesta.
0.9
Obsoleta. Soporta sólo un comando,
GET, y además no especifica el número de versión HTTP. No soporta cabeceras.
Como esta versión no soporta POST, el cliente no puede enviarle mucha
información al servidor.
HTTP/1.0
(mayo de 1996)
Esta es la primera revisión del
protocolo que especifica su versión en las comunicaciones, y todavía se usa
ampliamente, sobre todo en servidores proxy.
Versión actual; las conexiones persistentes
están activadas por defecto y funcionan bien con los proxies. También permite
al cliente enviar múltiples peticiones a la vez por la misma conexión
(pipelining) lo que hace posible eliminar el tiempo
de Round-Trip delay por cada petición.
HTTP/1.2
Los primeros borradores de 1995 del
documento PEP — an Extension Mechanism for HTTP (el cuál propone el Protocolo de Extensión de Protocolo, abreviado
PEP) los hizo el World Wide Web
Consortium y se envió al Internet
Engineering Task Force. El PEP inicialmente estaba destinado a
convertirse en un rango distintivo de HTTP/1.2.[3] En borradores
posteriores, sin embargo, se eliminó la referencia a HTTP/1.2. El RFC 2774
(experimental), HTTP Extension Framework, incluye en gran medida a PEP.
Se publicó en febrero de 2000.
No hay comentarios:
Publicar un comentario