Diferencia entre revisiones de «Protocolo de transferencia de hipertexto»

Contenido eliminado Contenido añadido
Diegusjaimes (discusión · contribs.)
m Revertidos los cambios de 190.247.148.43 (disc.) a la última edición de VolkovBot
Línea 17:
 
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 [[cookie]]s, 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 ambiente de [[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 ''Authorization'', ''Content-type'' y ''Content-length''. El servidor puede elegir excluir alguno o todos los encabezados si incluirlos excede algún límite del ambiente de sistema. Ejemplos de esto son las variables HTTP_ACCEPT y HTTP_USER_AGENT.
 
*'''HTTP_ACCEPT'''. Los [[Multipurpose Internet Mail Extensions|tipos MIME]] que el cliente aceptará, dado 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 lo dice 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.
 
Ten en cuenta que la lista no es una lista completa de los campos de encabezado y que algunos de
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 [[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.
; HTTP/1.1 (junio [[1999]])<ref>
Enero de [[1997]]. Se publica la primera versión de la especificación HTTP/1.1 <!-- {{Inet-note-ref|type=rfc|id=2068|text=RFC 2068}} --></ref><ref>
Junio de [[1999]]. Publicada la última versión de la especificación HTTP/1.1 <!-- {{Inet-note-ref|type=rfc|id=2616|text=RFC 2616}} --></ref>
 
: 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 (pipelining) lo que hace posible eliminar el [[RTT|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.<ref>[http://www.w3.org/TR/WD-http-pep-951122.html] ''PEP: An Extension Mechanism for HTTP''. Cita: "For experimental purposes, PEP-compatibility is equated with HTTP/1.2."</ref> 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]].
 
== Ejemplo de un diálogo HTTP ==