En telecomunicaciones y tecnología de la información, el Protocolo de transferencia de hipertexto ( HTTP ) (en italiano : protocolo de transferencia de hipertexto ) es un protocolo de capa de aplicación que se utiliza como sistema principal para transmitir información en la web o en una arquitectura cliente-servidor típica . Las especificaciones del protocolo son mantenidas por el World Wide Web Consortium ( W3C ). un servidorHTTP normalmente escucha las solicitudes de los clientes en el puerto 80 utilizando la capa de transporte TCP .
La primera versión de HTTP, 0.9, data de finales de los años 80 y constituyó, junto con el lenguaje HTML y las URL , el núcleo básico de la iniciativa de información global World Wide Web (WWW) desarrollada por Tim Berners-Lee en el CERN de Ginebra para el intercambio de información entre la comunidad de físicos de alta energía . Antes de HTTP, el protocolo de referencia para estos fines era el FTP , más sencillo y ligero .
Con la difusión de NCSA Mosaic , un navegador gráfico fácil de usar , la WWW experimentó un éxito creciente y se hicieron evidentes algunas limitaciones de la versión 1.0 del protocolo, en particular:
Versión | Año de introducción | Estado actual |
---|---|---|
HTTP / 0.9 | 1991 | Obsoleto |
HTTP / 1.0 | 1996 | Obsoleto |
HTTP / 1.1 | 1997 | Estándar |
HTTP / 2 | 2015 | Estándar |
HTTP / 3 | 2022 | Estándar |
HTTP es un protocolo que funciona con una arquitectura cliente/servidor : el cliente realiza una solicitud y el servidor devuelve la respuesta enviada por otro host. En el uso común, el cliente corresponde al navegador y el servidor a la máquina en la que reside el sitio web . Por lo tanto, hay dos tipos de mensajes HTTP : mensajes de solicitud (llamados solicitudes HTTP) y mensajes de respuesta (llamados respuestas HTTP).
HTTP se diferencia de otros protocolos de capa 7 , como FTP , en que las conexiones generalmente se cierran una vez que se ha satisfecho una solicitud particular (o una serie de solicitudes relacionadas). Este comportamiento hace que el protocolo HTTP sea ideal para la World Wide Web, en la que las páginas contienen muy a menudo enlaces a páginas alojadas en otros servidores, disminuyendo así el número de conexiones activas limitándolas a las realmente necesarias con un aumento de la eficiencia (menor carga y ocupación) tanto en el cliente como en el servidor. Sin embargo, a veces presenta problemas para los desarrolladores de contenido web, porque la naturaleza sin estado de la sesión de navegación los obliga a utilizar métodos alternativos, generalmente basados en cookies , para mantener el estado del usuario.
El mensaje de solicitud consta de cuatro partes:
La línea de solicitud consta del método, el URI y la versión del protocolo. El método de solicitud, para la versión 1.1, puede ser uno de los siguientes:
el URI , identificador uniforme de recursos , indica el asunto de la solicitud (por ejemplo, la página web que se desea obtener).
Los métodos HTTP más comunes son GET , HEAD y POST . El método GET se utiliza para obtener el contenido del recurso indicado como URI (como el contenido de una página HTML ). HEAD es análogo a GET , pero devuelve solo los campos de encabezado, por ejemplo, para verificar la fecha de modificación del archivo. Una solicitud con el método HEAD no requiere el uso del cuerpo.
El método POST generalmente se usa para enviar información al servidor (como datos de formulario ). En este caso la URI indica lo que se está enviando y el cuerpo indica su contenido.
Los encabezados de solicitudLos encabezados de solicitud más comunes son:
Host : Nombre del servidor al que hace referencia la URL . Se requiere en solicitudes compatibles con HTTP/1.1 porque permite el uso de hosts virtuales basados en nombres. User-Agent : identificación del tipo de cliente: tipo de navegador, fabricante, versión… Cookies: utilizadas por las aplicaciones web para almacenar y recuperar información del lado del cliente a largo plazo. A menudo se usa para almacenar un token de autenticación o para rastrear la actividad del usuario.El mensaje de respuesta es textual y consta de cuatro partes:
La línea de estado muestra un código de tres dígitos catalogado de la siguiente manera:
Los códigos de respuesta más comunes son:
Los encabezados de respuesta más comunes son:
El cliente puede solicitar al servidor, en el mensaje de solicitud, que utilice dos tipos de comunicación.
no persistente Para cada solicitud y su respuesta, se establece una conexión TCP dedicada. Persistente Cada solicitud y su respuesta se transfieren utilizando la misma conexión TCP. Este es el comportamiento predeterminado de HTTP 1.1.Por un lado, las conexiones no persistentes introducen una latencia adicional respecto a las persistentes de al menos 3 Round Trip Times (RTT). De hecho, al final de cada respuesta del servidor se vuelven necesarios
Por otro lado, las conexiones persistentes impiden el paralelismo en las comunicaciones, ya que el cliente que tiene varias solicitudes para enviar al mismo servidor se ve obligado a procesarlas secuencialmente, una tras otra. Por estas razones, los navegadores suelen explotar las complementariedades de rendimiento de las dos políticas de comunicación para maximizar su eficiencia: suelen abrir varias conexiones TCP en paralelo con cada servidor, sobre las que se comunican con una estrategia persistente.
A continuación se muestran ejemplos de mensajes de solicitud y respuesta HTTP/1.1.
Los ejemplos se refieren a la recuperación de contenidos en esta enciclopedia web y pueden reproducirse, y por lo tanto verificarse, en su PC copiando y pegando el texto con un cliente TCP (por ejemplo: telnet it.wikipedia.org 80en el caso de URL http: //), o TCP cliente con soporte SSL (por ejemplo, openssl s_client -connect it.wikipedia.org:443en el caso de https: // URL).
A los efectos de la reproducción se hace constar que:
Recupere el recurso web presente en la URL https://it.wikipedia.org/wiki/Pagina_principale
GET / wiki / Main_page HTTP / 1.1 Host : it.wikipedia.org Agente de usuario : Mozilla / 5.0 (compatible; Konqueror / 3.2; Linux) (KHTML, como Gecko) Aceptar : texto / html, imagen / jpeg, imagen / png , texto / *, imagen / *, * / * Accept-Charset : iso-8859-1, utf-8; q = 0.5, *; q = 0.5 Accept-Language : it Conexión : Keep-AliveRespuesta exitosa (200 OK):
HTTP / 1.1 200 OK Fecha : viernes, 22 de febrero de 2019 10:50:37 GMT Tipo de contenido : texto / html; charset = UTF-8 Longitud del contenido : 22208 Conexión : servidor keep-alive : mw1215.eqiad.wmnet Idioma del contenido : it Codificación del contenido : gzip Última modificación : viernes, 22 de febrero de 2019 08:46:20 GMT Edad : 20548 Cache-Control : privado, s-maxage = 0, max-age = 0, must-revalidate Vary : Accept-Encoding, Cookie, Autorización [...] <!DOCTYPE html> < html class = "client-nojs" lang = "it" dir = "ltr" > < head > < meta charset = "UTF-8" /> < title > Wikipedia, la enciclopedia libre </ title > [...] </ cuerpo > </ html >Aquí el cliente recupera la URL http://it.wikipedia.org/wiki/Pagina_principale (se diferencia de la anterior por ser http en lugar de https).
La solicitud sigue siendo la misma que en el ejemplo anterior.
La respuesta cambia al mostrar un código de movimiento permanente (301 Movido permanentemente):
HTTP / 1.1 301 Movido permanentemente Fecha : miércoles, 19 de abril de 2017 16:50:43 GMT Servidor : Varnish Ubicación : https://it.wikipedia.org/wiki/Pagina_principale Longitud del contenido : 0 Conexión : keep-aliveEsta es una solicitud POST para cambiar sus preferencias de Wikipedia con el tema "Azul Colonia" (la subcadena &wpskin=cologneblueen la primera línea del cuerpo de la solicitud POST)
POST / wiki / Especial: HTTP / 1.1 Preferencias Host : it.wikipedia.org Agente de usuario : Mozilla / 5.0 (compatible; Konqueror / 3.2; Linux) (KHTML, como Gecko) Aceptar : texto / html, imagen / jpeg, imagen / png, texto / *, imagen / *, * / * Accept-Charset : iso-8859-1, utf-8; q = 0.5, *; q = 0.5 Accept-Language : it Connection : Keep-Alive Cache-control : sin caché Longitud del contenido : 1291 Tipo de contenido : aplicación / x-www-form-urlencoded wplanguage=it&wpgender=unknown&wpnickname=&wpdisablemail=1&wpskin=cologneblue&wppopups=0&wpdate=default&wpServerTime=1034&wptimecorrection=System%7C120&wptimecorrection-other=02%3A00&wpimagesize=2&wpthumbsize=2&wpmultimediaviewer-enable=1&wpunderline=2&wpstubthreshold=0&wpmath=mathml&wpcompact-language-links=1&wpeditfont=default&wpuseeditwarning= 1&wpshowtoolbar=1&wpusebetatoolbar=1&wpusebetatoolbar-cgd=1&wppreviewontop=1&wprcdays=7&wprclimit=50&wphidecategorization=1&wpwatchlistdays=3&wpwllimit=250&wpwatchlisthidecategorization=1&wpcirrussearch-pref-completion-profile=fuzzy&wpgadgets%5B%5D=HiddenCat&wpgadgets%5B%5D=OpenStreetMap&wpgadgets%5B%5D=ReferenceTooltips&wpgadgets% 5B% 5D = WikiMiniAtlas & wpgadgets% 5B% 5D = ExternalSearch & wpecho-email-frequency = 0 & wpecho-email-format = html & wpecho-subscriptions% 5B% 5D = email-edit-user-talk & wpecho-subscriptions% 5B% 5D = web-edit-thank & wpecho suscripciones% 5B% 5D = web-flow-discussion & wpecho-subscriptions% 5B% 5D = web-mention & wpecho-subscriptions% 5B% 5D = web-user-rights & wpecho-subscriptions% 5B% 5D = derechos de usuario de correo electrónico & wpecho-subscriptions% 5B% 5D = web-reverted & wpecho-subscriptions% 5B% 5D = web-emailuser & wpecho-cross-wiki-notifications = 1 & wpecho -show-alert = 1 & wpEdit588129009809809807c83b8159809802c 2B% 5C & title = Special% 3APreferences & wpenotifusertalkpagesLa respuesta HTTP de redireccionamiento temporal (302 encontrado) conduce a la página de inicio de sesión
HTTP / 1.1 302 Fecha de hallazgo : miércoles, 19 de abril de 2017 17:21:16 GMT Tipo de contenido : texto / html; charset = utf-8 Content-Length : 0 Connection : keep-alive Server : mw2224.codfw.wmnet Variar : Accept-Encoding, X-Forwarded-Proto, Cookie, Authorization Expires : Thu, 01 Jan 1970 00:00:00 GMT Ubicación : https://it.wikipedia.org/w/index.php?title=Speciale:Entra&returnto=Speciale%3APreferenze&returntoquery=&warning=prefsnologintext2 Edad : 0 Control de caché : privado, s-maxage = 0, max-age = 0, debe revalidarEl GET en la versión HTTP/1.0 es conveniente para los docentes, se puede hacer con una sola línea porque en la versión 1.0 del protocolo no era obligatorio insertar el encabezado "Host:"
Para realizarlo haces:
OBTENER / HTTP / 1.0Recuerde dejar una línea en blanco después de la solicitud. Espere la respuesta del servidor web ...
CABEZA / HTTP / 1.0También es muy conveniente hacer la solicitud HEAD del protocolo que devuelve solo las cabeceras con:
CABEZA / HTTP / 1.0Dado que todo el tráfico HTTP es anónimo y en texto claro , se han desarrollado varias alternativas para garantizar diferentes niveles de seguridad , en términos de
La primera propuesta provino directamente de NCSA , con versiones de servidor 1.1 y cliente 2.2 que admiten un mecanismo de autenticación de usuarios y cifrado de datos basado en mensajes en formato PEM y claves PGP .
Posteriormente, se estandarizaron dos versiones seguras del protocolo HTTP denominadas SHTTP y HTTPS . El primero, basado en el correo cifrado S/MIME , ahora ha caído en desuso y proporciona mecanismos criptográficos a nivel de carga útil : las solicitudes y los encabezados se intercambian en texto claro mientras que el contenido de la página se cifra como una estructura MIME de varias partes . En su lugar, el mecanismo HTTPS, inventado por Netscape , utiliza el canal cifrado de la capa de transporte subyacente mediante SSL o TLS para evitar la intercepción de cualquier parte de la transacción. Ambos protocolos pueden garantizar la identidad del remitente, pero sólo SHTTP también puede garantizar la integridad del contenido después de haberlo almacenado, por ejemplo, en un disco.
La utilización de material multimedia en las páginas WEB , como audio o vídeo , se gestiona de forma totalmente similar a la descarga de archivos, mediante una carga progresiva o distribución progresiva , en la que el archivo se descarga progresivamente de principio a fin (a través de la Real Time Streaming Protocol y Real - time Transport Protocol ) y si la tasa de bits es excesiva para la red que lo transporta, puede ocurrir una recarga continua del búfer .
Para evitar estos problemas existen otros sistemas alternativos, que permiten la adaptación del archivo a la red del usuario final, estos sistemas se caracterizan por los protocolos:
Por otro lado, estas soluciones son considerablemente más complejas que las tecnologías de transmisión tradicionales. Algunas de las consideraciones documentadas se relacionan con el almacenamiento, los costos adicionales de codificación y la dificultad para mantener la calidad general. También se han encontrado algunas dinámicas interesantes en torno a interacciones complejas entre la lógica de tasa de bits adaptativa que compite con la lógica de control de flujo de TCP compleja. [8] [9]