stringtranslate.com

HTTP

El Protocolo de transferencia de hipertexto ( HTTP ) es un protocolo de capa de aplicación en el modelo de conjunto de protocolos de Internet para sistemas de información hipermedia , colaborativos y distribuidos . [1] HTTP es la base de la comunicación de datos para la World Wide Web , donde los documentos de hipertexto incluyen hipervínculos a otros recursos a los que el usuario puede acceder fácilmente, por ejemplo, haciendo clic con el mouse o tocando la pantalla de un navegador web.

El desarrollo de HTTP fue iniciado por Tim Berners-Lee en el CERN en 1989 y se resumió en un documento simple que describe el comportamiento de un cliente y un servidor usando la primera versión de HTTP, denominada 0.9. [2] Esa versión se desarrolló posteriormente y finalmente se convirtió en la pública 1.0. [3]

El desarrollo de las primeras solicitudes de comentarios (RFC) HTTP comenzó unos años más tarde en un esfuerzo coordinado por el Grupo de Trabajo de Ingeniería de Internet (IETF) y el Consorcio World Wide Web (W3C), y el trabajo se trasladó posteriormente al IETF.

HTTP/1 se finalizó y documentó completamente (como versión 1.0) en 1996. [4] Evolucionó (como versión 1.1) en 1997 y luego sus especificaciones se actualizaron en 1999, 2014 y 2022. [5]

Su variante segura denominada HTTPS es utilizada por más del 85% de los sitios web. [6] HTTP/2 , publicado en 2015, proporciona una expresión más eficiente de la semántica de HTTP "en el cable". En enero de 2024, lo utilizan el 36 % de los sitios web [7] y lo admiten casi todos los navegadores web (más del 98 % de los usuarios). [8] También es compatible con los principales servidores web a través de Transport Layer Security (TLS) utilizando una extensión de negociación de protocolo de capa de aplicación (ALPN) [9] donde se requiere TLS 1.2 o posterior. [10] [11]

HTTP/3 , el sucesor de HTTP/2, se publicó en 2022. [12] Actualmente se utiliza en el 28 % de los sitios web [13] y es compatible con la mayoría de los navegadores web, es decir, (al menos parcialmente) con el 97 % de los navegadores web. navegadores web. [14] HTTP/3 utiliza QUIC en lugar de TCP para el protocolo de transporte subyacente. Al igual que HTTP/2, no deja obsoletas las versiones principales anteriores del protocolo. La compatibilidad con HTTP/3 se agregó primero a Cloudflare y Google Chrome , [15] [16] y también está habilitada en Firefox . [17] HTTP/3 tiene una latencia más baja para páginas web del mundo real; si está habilitado en el servidor, se carga más rápido que con HTTP/2, e incluso más rápido que HTTP/1.1, en algunos casos más de 3 veces más rápido que HTTP/1.1 ( que todavía normalmente solo está habilitado). [18]

Resumen técnico

HTTP funciona como un protocolo de solicitud-respuesta en el modelo cliente-servidor . Un navegador web , por ejemplo, puede ser el cliente , mientras que un proceso , denominado servidor web , que se ejecuta en una computadora que aloja uno o más sitios web puede ser el servidor . El cliente envía un mensaje de solicitud HTTP al servidor. El servidor, que proporciona recursos como archivos HTML y otro contenido o realiza otras funciones en nombre del cliente, devuelve un mensaje de respuesta al cliente. La respuesta contiene información sobre el estado de finalización de la solicitud y también puede contener contenido solicitado en el cuerpo del mensaje.

Un navegador web es un ejemplo de agente de usuario (UA). Otros tipos de agente de usuario incluyen el software de indexación utilizado por los proveedores de búsqueda ( rastreadores web ), navegadores de voz , aplicaciones móviles y otro software que accede, consume o muestra contenido web.

HTTP está diseñado para permitir que los elementos intermedios de la red mejoren o permitan las comunicaciones entre clientes y servidores. Los sitios web con mucho tráfico a menudo se benefician de los servidores de caché web que entregan contenido en nombre de los servidores ascendentes para mejorar el tiempo de respuesta. Los navegadores web almacenan en caché los recursos web a los que se accedió anteriormente y los reutilizan, siempre que sea posible, para reducir el tráfico de la red. Los servidores proxy HTTP en los límites de la red privada pueden facilitar la comunicación para los clientes sin una dirección enrutable globalmente, al retransmitir mensajes con servidores externos.

Para permitir que los nodos HTTP intermedios (servidores proxy, cachés web, etc.) realicen sus funciones, algunos de los encabezados HTTP (que se encuentran en las solicitudes/respuestas HTTP) se administran salto por salto, mientras que otros encabezados HTTP se administran de extremo a extremo. final (administrado sólo por el cliente de origen y por el servidor web de destino).

HTTP es un protocolo de capa de aplicación diseñado dentro del marco del conjunto de protocolos de Internet . Su definición supone un protocolo de capa de transporte subyacente y confiable . [19] En la última versión HTTP/3 , el Protocolo de control de transmisión (TCP) ya no se usa, pero las versiones anteriores aún se usan más y usan más comúnmente TCP. También se han adaptado para utilizar protocolos no confiables como el Protocolo de datagramas de usuario (UDP), en el que HTTP/3 también (indirectamente) siempre se basa, por ejemplo en HTTPU y el Protocolo simple de descubrimiento de servicios (SSDP).

Los recursos HTTP se identifican y ubican en la red mediante localizadores uniformes de recursos (URL), utilizando los esquemas de identificadores uniformes de recursos (URI) http y https . Como se define en RFC  3986, los URI se codifican como hipervínculos en documentos HTML , para formar documentos de hipertexto interconectados .

En HTTP/1.0 se realiza una conexión TCP independiente al mismo servidor para cada solicitud de recurso. [20]

En cambio, en HTTP/1.1 se puede reutilizar una conexión TCP para realizar múltiples solicitudes de recursos (es decir, páginas HTML, marcos, imágenes, scripts , hojas de estilo , etc.). [21] [22]

Por lo tanto, las comunicaciones HTTP/1.1 experimentan menos latencia ya que el establecimiento de conexiones TCP presenta una sobrecarga considerable, especialmente en condiciones de mucho tráfico. [23]

HTTP/2 es una revisión del anterior HTTP/1.1 para mantener el mismo modelo cliente-servidor y los mismos métodos de protocolo pero con estas diferencias en orden:

Por lo tanto, las comunicaciones HTTP/2 experimentan mucha menos latencia y, en la mayoría de los casos, velocidades incluso más altas que las comunicaciones HTTP/1.1.

HTTP/3 es una revisión del HTTP/2 anterior para utilizar protocolos de transporte QUIC + UDP en lugar de TCP. Antes de esa versión, se utilizaban conexiones TCP/IP; pero ahora, sólo se utiliza la capa IP (en la que se basa UDP, al igual que TCP). Esto mejora ligeramente la velocidad media de las comunicaciones y evita el problema ocasional (muy raro) de congestión de la conexión TCP que puede bloquear o ralentizar temporalmente el flujo de datos de todos sus flujos (otra forma de " bloqueo de cabecera de línea ").

Historia

Tim Berners-Lee

El término hipertexto fue acuñado por Ted Nelson en 1965 en el Proyecto Xanadu , que a su vez se inspiró en la visión de Vannevar Bush de la década de 1930 del sistema " memex " de recuperación y gestión de información basado en microfilmes descrito en su ensayo de 1945 " Como podemos pensar ". ". A Tim Berners-Lee y su equipo en el CERN se les atribuye la invención del HTTP original, junto con HTML y la tecnología asociada para un servidor web y una interfaz de usuario cliente llamada navegador web . Berners-Lee diseñó HTTP para ayudar con la adopción de su otra idea: el proyecto "WorldWideWeb", propuesto por primera vez en 1989, ahora conocido como World Wide Web .

El primer servidor web entró en funcionamiento en 1990. [25] [26] El protocolo utilizado tenía un solo método, a saber, GET, que solicitaría una página de un servidor. [27] La ​​respuesta del servidor siempre fue una página HTML. [2]

Resumen de versiones de hitos HTTP

HTTP/0.9
En 1991, la primera versión oficial documentada de HTTP se escribió como un documento simple, de menos de 700 palabras, y esta versión se denominó HTTP/0.9, que solo admitía el método GET, lo que permitía a los clientes recuperar solo documentos HTML del servidor, pero no admite ningún otro formato de archivo ni carga de información. [2]
HTTP/1.0-borrador
Desde 1992 se redactó un nuevo documento para especificar la evolución del protocolo básico hacia su próxima versión completa. Admitía tanto el método de solicitud simple de la versión 0.9 como la solicitud GET completa que incluía la versión HTTP del cliente. Este fue el primero de los muchos borradores no oficiales de HTTP/1.0 que precedieron al trabajo final sobre HTTP/1.0. [3]
Grupo de trabajo HTTP del W3C
Después de haber decidido que se requerían nuevas características del protocolo HTTP y que debían estar completamente documentadas como RFC oficiales , a principios de 1995 se constituyó el Grupo de Trabajo HTTP (HTTP WG, liderado por Dave Raggett ) con el objetivo de estandarizar y ampliar el protocolo. con operaciones extendidas, negociación extendida, metainformación más rica, vinculado con un protocolo de seguridad que se volvió más eficiente al agregar métodos y campos de encabezado adicionales . [28] [29]
El HTTP WG planeó revisar y publicar nuevas versiones del protocolo como HTTP/1.0 y HTTP/1.1 dentro de 1995, pero, debido a las numerosas revisiones, ese cronograma duró mucho más de un año. [30]
El HTTP WG planeó también especificar una versión de HTTP en el futuro lejano llamada HTTP-NG (HTTP Next Generation) que habría resuelto todos los problemas restantes, de versiones anteriores, relacionados con el rendimiento, las respuestas de baja latencia, etc., pero este trabajo comenzó hace sólo un tiempo. Unos años más tarde y nunca se completó.
HTTP/1.0
En mayo de 1996, se publicó RFC  1945 como una revisión final de HTTP/1.0 de lo que se había utilizado en los 4 años anteriores como un borrador HTTP/1.0 preestándar que ya era utilizado por muchos navegadores y servidores web.
A principios de 1996, los desarrolladores comenzaron a incluir incluso extensiones no oficiales del protocolo HTTP/1.0 (es decir, conexiones keep-alive, etc.) en sus productos mediante el uso de borradores de las próximas especificaciones HTTP/1.1. [31]
HTTP/1.1
Desde principios de 1996, los principales navegadores web y desarrolladores de servidores web también comenzaron a implementar nuevas características especificadas en los borradores de especificaciones HTTP/1.1 preestándar. La adopción por parte de los usuarios finales de las nuevas versiones de navegadores y servidores fue rápida. En marzo de 1996, una empresa de alojamiento web informó que más del 40% de los navegadores utilizados en Internet utilizaban el nuevo encabezado HTTP/1.1 "Host" para habilitar el alojamiento virtual . Esa misma empresa de alojamiento web informó que en junio de 1996, el 65% de todos los navegadores que accedían a sus servidores cumplían con el estándar HTTP/1.1. [32]
En enero de 1997, RFC  2068 se lanzó oficialmente como especificaciones HTTP/1.1.
En junio de 1999,  se publicó RFC 2616 para incluir todas las mejoras y actualizaciones basadas en especificaciones HTTP/1.1 anteriores (obsoletas).
Grupo de trabajo HTTP-NG del W3C
Retomando el antiguo plan de 1995 del anterior Grupo de Trabajo HTTP, en 1997 se formó un Grupo de Trabajo HTTP-NG para desarrollar un nuevo protocolo HTTP llamado HTTP-NG (HTTP Nueva Generación). Se produjeron algunas propuestas/borradores para que el nuevo protocolo utilizara la multiplexación de transacciones HTTP dentro de una única conexión TCP/IP, pero en 1999, el grupo detuvo su actividad y pasó los problemas técnicos al IETF. [33]
Se reinició el grupo de trabajo HTTP del IETF
En 2007, el Grupo de Trabajo HTTP del IETF (HTTP WG bis o HTTPbis) se reinició, en primer lugar, para revisar y aclarar las especificaciones HTTP/1.1 anteriores y, en segundo lugar, para escribir y perfeccionar futuras especificaciones HTTP/2 (llamadas httpbis). [34] [35]
SPDY: un protocolo HTTP no oficial desarrollado por Google
En 2009, Google , una empresa privada, anunció que había desarrollado y probado un nuevo protocolo binario HTTP llamado SPDY . El objetivo implícito era acelerar enormemente el tráfico web (especialmente entre los futuros navegadores web y sus servidores).
De hecho, SPDY fue mucho más rápido que HTTP/1.1 en muchas pruebas, por lo que Chromium lo adoptó rápidamente y luego otros navegadores web importantes. [36]
Algunas de las ideas sobre la multiplexación de flujos HTTP a través de una única conexión TCP/IP se tomaron de varias fuentes, incluido el trabajo del Grupo de Trabajo HTTP-NG del W3C.
HTTP/2
En enero-marzo de 2012, el Grupo de Trabajo HTTP (HTTPbis) anunció la necesidad de empezar a centrarse en un nuevo protocolo HTTP/2 (mientras finalizaba la revisión de las especificaciones HTTP/1.1), tal vez teniendo en cuenta ideas y el trabajo realizado para SPDY. [37] [38]
Después de unos meses pensando qué hacer para desarrollar una nueva versión de HTTP, se decidió derivarla de SPDY. [39]
En mayo de 2015, HTTP/2 se publicó como RFC  7540 y fue adoptado rápidamente por todos los navegadores web que ya soportan SPDY y, más lentamente, por los servidores web.
Actualizaciones de 2014 a HTTP/1.1
En junio de 2014, el Grupo de Trabajo HTTP publicó una especificación HTTP/1.1 actualizada de seis partes que deja obsoleto el RFC  2616:
  • RFC  7230, HTTP/1.1: Sintaxis y enrutamiento de mensajes
  • RFC  7231, HTTP/1.1: Semántica y Contenido
  • RFC  7232, HTTP/1.1: Solicitudes condicionales
  • RFC  7233, HTTP/1.1: Solicitudes de rango
  • RFC  7234, HTTP/1.1: almacenamiento en caché
  • RFC  7235, HTTP/1.1: Autenticación
HTTP/0.9 en desuso
En  el Apéndice A del RFC 7230, HTTP/0.9 quedó obsoleto para los servidores que admiten la versión HTTP/1.1 (y superior): [40]

Dado que HTTP/0.9 no admitía campos de encabezado en una solicitud, no existe ningún mecanismo para admitir hosts virtuales basados ​​en nombres (selección de recursos mediante inspección del campo de encabezado del Host). Cualquier servidor que implemente hosts virtuales basados ​​en nombres debe deshabilitar la compatibilidad con HTTP/0.9 . La mayoría de las solicitudes que parecen ser HTTP/0.9 son, de hecho, solicitudes HTTP/1.x mal construidas causadas por un cliente que no codificó correctamente el destino de la solicitud.

Desde 2016, muchos gerentes de producto y desarrolladores de agentes de usuario (navegadores, etc.) y servidores web han comenzado a planear desaprobar y descartar gradualmente el soporte para el protocolo HTTP/0.9, principalmente por las siguientes razones: [ 41]
  • es tan simple que nunca se escribió un documento RFC (solo existe el documento original); [2]
  • no tiene encabezados HTTP y carece de muchas otras características que hoy en día son necesarias por razones mínimas de seguridad;
  • no se ha generalizado desde 1999..2000 (debido a HTTP/1.0 y HTTP/1.1) y se utiliza comúnmente sólo en algunos hardware de red muy antiguos, es decir, enrutadores , etc.
[nota 2]
HTTP/3
En 2020, se publicaron los primeros borradores de HTTP/3 y los principales navegadores y servidores web comenzaron a adoptarlo.
El 6 de junio de 2022, el IETF estandarizó HTTP/3 como RFC  9114. [42]
Actualizaciones y refactorización en 2022
En junio de 2022, se publicó un lote de RFC que dejó obsoletos muchos de los documentos anteriores e introdujo algunos cambios menores y una refactorización de la descripción semántica HTTP en un documento separado.
  • RFC  9110, Semántica HTTP
  • RFC  9111, almacenamiento en caché HTTP
  • RFC  9112, HTTP/1.1
  • RFC  9113, HTTP/2
  • RFC  9114, HTTP/3 (ver también la sección anterior)
  • RFC  9204, QPACK: Compresión de campos para HTTP/3
  • RFC  9218, Esquema de priorización extensible para HTTP

intercambio de datos HTTP

HTTP es un protocolo a nivel de aplicación sin estado y requiere una conexión de transporte de red confiable para intercambiar datos entre el cliente y el servidor. [19] En las implementaciones HTTP, las conexiones TCP/IP se utilizan utilizando puertos conocidos (normalmente el puerto 80 si la conexión no está cifrada o el puerto 443 si la conexión está cifrada; consulte también Lista de números de puerto TCP y UDP ). [43] [44] En HTTP/2, se utiliza una conexión TCP/IP más múltiples canales de protocolo. En HTTP/3, se utiliza el protocolo de transporte de aplicaciones QUIC sobre UDP.

Mensajes de solicitud y respuesta a través de conexiones.

Los datos se intercambian a través de una secuencia de mensajes de solicitud-respuesta que se intercambian mediante una conexión de transporte de capa de sesión . [19] Un cliente HTTP inicialmente intenta conectarse a un servidor estableciendo una conexión (real o virtual). Un servidor HTTP(S) que escucha en ese puerto acepta la conexión y luego espera el mensaje de solicitud de un cliente. El cliente envía su mensaje de solicitud HTTP. Al recibir la solicitud, el servidor devuelve un mensaje de respuesta HTTP, que incluye encabezados más un cuerpo si es necesario. El cuerpo de este mensaje de respuesta suele ser el recurso solicitado, aunque también se puede devolver un mensaje de error u otra información. En cualquier momento (por muchas razones) el cliente o el servidor pueden cerrar la conexión. El cierre de una conexión generalmente se anuncia con anticipación mediante el uso de uno o más encabezados HTTP en el último mensaje de solicitud/respuesta enviado al servidor o al cliente. [21]

Conexiones persistentes

En HTTP/0.9 , la conexión TCP/IP siempre se cierra después de enviar la respuesta del servidor, por lo que nunca es persistente.

En HTTP/1.0 , como se indica en RFC 1945, el servidor siempre debe cerrar la conexión TCP/IP después de que se haya enviado una respuesta. [nota 3]

En HTTP/1.1 se introdujo oficialmente un mecanismo de mantenimiento de conexión para que una conexión pudiera reutilizarse para más de una solicitud/respuesta. Estas conexiones persistentes reducen perceptiblemente la latencia de las solicitudes porque el cliente no necesita renegociar la conexión TCP 3-Way-Handshake después de que se haya enviado la primera solicitud. Otro efecto secundario positivo es que, en general, la conexión se vuelve más rápida con el tiempo debido al mecanismo de inicio lento de TCP .

HTTP/1.1 también agregó canalización HTTP para reducir aún más el tiempo de demora cuando se usan conexiones persistentes al permitir a los clientes enviar múltiples solicitudes antes de esperar cada respuesta. Esta optimización nunca se consideró realmente segura porque algunos servidores web y muchos servidores proxy , especialmente servidores proxy transparentes ubicados en Internet/ Intranets entre clientes y servidores, no manejaban las solicitudes canalizadas correctamente (sólo atendían la primera solicitud descartando las demás, cerraban la conexión porque vieron más datos después de la primera solicitud o algunos proxies incluso devolvieron respuestas desordenadas, etc.). Además de esto, solo las solicitudes HEAD y algunas GET (es decir, limitadas a solicitudes de archivos reales y, por lo tanto, con URL sin cadena de consulta utilizadas como comando, etc.) podrían canalizarse en un modo seguro e idempotente. Después de muchos años de luchar con los problemas introducidos al habilitar la canalización, esta característica primero se deshabilitó y luego se eliminó de la mayoría de los navegadores también debido a la adopción anunciada de HTTP/2.

HTTP/2 amplió el uso de conexiones persistentes al multiplexar muchas solicitudes/respuestas simultáneas a través de una única conexión TCP/IP.

HTTP/3 no utiliza conexiones TCP/IP sino QUIC + UDP (ver también: descripción técnica).

Optimizaciones de recuperación de contenido

HTTP/0.9
un recurso solicitado siempre se enviaba completo.
HTTP/1.0
HTTP/1.0 agregó encabezados para administrar los recursos almacenados en caché por el cliente para permitir solicitudes GET condicionales; en la práctica, un servidor tiene que devolver el contenido completo del recurso solicitado solo si el cliente no conoce la hora de su última modificación o si cambió desde la última respuesta completa a la solicitud GET. Uno de estos encabezados, "Content-Encoding", se agregó para especificar si el contenido devuelto de un recurso estaba comprimido o no .
Si la longitud total del contenido de un recurso no se conocía de antemano (es decir, porque se generó dinámicamente, etc.), entonces el encabezado "Content-Length: number"no estaba presente en los encabezados HTTP y el cliente suponía que cuando el servidor cerró la conexión, el contenido había sido enteramente enviado. Este mecanismo no podía distinguir entre una transferencia de recursos completada con éxito y una interrumpida (debido a un error del servidor/red o algo más).
HTTP/1.1
HTTP/1.1 introducido:
  • Nuevos encabezados para gestionar mejor la recuperación condicional de recursos almacenados en caché.
  • codificación de transferencia fragmentada para permitir que el contenido se transmita en fragmentos para enviarlo de manera confiable incluso cuando el servidor no conoce de antemano su longitud (es decir, porque se genera dinámicamente, etc.).
  • servicio de rango de bytes , donde un cliente puede solicitar solo una o más porciones (rangos de bytes) de un recurso (es decir, la primera parte, una parte en el medio o al final de todo el contenido, etc.) y el servidor generalmente envía sólo la(s) parte(s) solicitada(s). Esto es útil para reanudar una descarga interrumpida (cuando un archivo es muy grande), cuando un navegador solo debe mostrar o agregar dinámicamente una parte de un contenido a la parte ya visible (es decir, solo el primero o los siguientes n comentarios de una página web) para ahorrar tiempo, ancho de banda y recursos del sistema, etc.
HTTP/2, HTTP/3
Tanto HTTP/2 como HTTP/3 han mantenido las características mencionadas anteriormente de HTTP/1.1.

autenticación HTTP

HTTP proporciona múltiples esquemas de autenticación, como la autenticación de acceso básico y la autenticación de acceso implícito , que funcionan mediante un mecanismo de desafío-respuesta mediante el cual el servidor identifica y emite un desafío antes de entregar el contenido solicitado.

HTTP proporciona un marco general para el control de acceso y la autenticación, a través de un conjunto extensible de esquemas de autenticación de desafío-respuesta, que puede ser utilizado por un servidor para desafiar una solicitud de un cliente y por un cliente para proporcionar información de autenticación. [1]

Los mecanismos de autenticación descritos anteriormente pertenecen al protocolo HTTP y son administrados por el software HTTP del cliente y del servidor (si está configurado para requerir autenticación antes de permitir el acceso del cliente a uno o más recursos web), y no por las aplicaciones web que utilizan una sesión de aplicación web.

Reinos de autenticación

La especificación de autenticación HTTP también proporciona una construcción arbitraria específica de la implementación para dividir aún más los recursos comunes a un URI raíz determinado . La cadena de valor del dominio, si está presente, se combina con el URI raíz canónico para formar el componente de espacio de protección del desafío. De hecho, esto permite que el servidor defina ámbitos de autenticación separados bajo un URI raíz. [1]

sesión de aplicación HTTP

HTTP es un protocolo sin estado . Un protocolo sin estado no requiere que el servidor web conserve información o estado sobre cada usuario durante múltiples solicitudes.

Algunas aplicaciones web necesitan gestionar las sesiones de los usuarios, por lo que implementan estados o sesiones del lado del servidor , utilizando, por ejemplo, cookies HTTP [45] o variables ocultas dentro de los formularios web .

Para iniciar una sesión de usuario de la aplicación, se debe realizar una autenticación interactiva mediante el inicio de sesión de la aplicación web. Para detener la sesión de un usuario, el usuario debe solicitar una operación de cierre de sesión . Este tipo de operaciones no utilizan autenticación HTTP sino una autenticación de aplicación web administrada personalizada.

Mensajes de solicitud HTTP/1.1

Los mensajes de solicitud son enviados por un cliente a un servidor de destino. [nota 4]

Solicitar sintaxis

Un cliente envía mensajes de solicitud al servidor, que constan de: [46]

OBTENER  /images/logo.png  HTTP / 1.1
Anfitrión: www.ejemplo.comAceptar-Idioma: en

En el protocolo HTTP/1.1, todos los campos de encabezado excepto Host: hostnameson opcionales.

Los servidores aceptan una línea de solicitud que contiene solo el nombre de la ruta para mantener la compatibilidad con los clientes HTTP antes de la especificación HTTP/1.0 en RFC  1945. [47]

Métodos de solicitud

Una solicitud HTTP/1.1 realizada mediante telnet. El mensaje de solicitud , la sección del encabezado de respuesta y el cuerpo de la respuesta están resaltados.

HTTP define métodos (a veces denominados verbos , pero en ninguna parte de la especificación menciona el verbo ) para indicar la acción deseada que se realizará en el recurso identificado. Lo que representa este recurso, ya sean datos preexistentes o datos generados dinámicamente, depende de la implementación del servidor. A menudo, el recurso corresponde a un archivo o la salida de un ejecutable que reside en el servidor. La especificación HTTP/1.0 [48] definió los métodos GET, HEAD y POST, y la especificación HTTP/1.1 [49] agregó cinco métodos nuevos: PUT, DELETE, CONNECT, OPTIONS y TRACE. Cualquier cliente puede utilizar cualquier método y el servidor se puede configurar para admitir cualquier combinación de métodos. Si un método es desconocido para un intermedio, se tratará como un método inseguro y no idempotente . No hay límite para la cantidad de métodos que se pueden definir, lo que permite especificar métodos futuros sin romper la infraestructura existente. Por ejemplo, WebDAV definió siete métodos nuevos y RFC  5789 especificó el método PATCH .

Los nombres de los métodos distinguen entre mayúsculas y minúsculas. [50] [51] Esto contrasta con los nombres de campos de encabezado HTTP que no distinguen entre mayúsculas y minúsculas. [52]

CONSEGUIR
El método GET solicita que el recurso de destino transfiera una representación de su estado. Las solicitudes GET solo deben recuperar datos y no deben tener ningún otro efecto. (Esto también se aplica a otros métodos HTTP). [1] Para recuperar recursos sin realizar cambios, se prefiere GET a POST, ya que se pueden acceder a través de una URL . Esto permite marcar y compartir y hace que las respuestas GET sean elegibles para el almacenamiento en caché , lo que puede ahorrar ancho de banda. El W3C ha publicado principios orientativos sobre esta distinción, diciendo: " El diseño de aplicaciones web debe basarse en los principios anteriores, pero también en las limitaciones pertinentes". [53] Consulte los métodos seguros a continuación.

CABEZA
El método HEAD solicita que el recurso de destino transfiera una representación de su estado, como para una solicitud GET, pero sin los datos de representación incluidos en el cuerpo de la respuesta. Esto es útil para recuperar los metadatos de la representación en el encabezado de respuesta, sin tener que transferir la representación completa. Los usos incluyen verificar si una página está disponible a través del código de estado y encontrar rápidamente el tamaño de un archivo ( Content-Length).

CORREO
El método POST solicita que el recurso de destino procese la representación incluida en la solicitud de acuerdo con la semántica del recurso de destino. Por ejemplo, se utiliza para publicar un mensaje en un foro de Internet , suscribirse a una lista de correo o completar una transacción de compra en línea . [54]

PONER
El método PUT solicita que el recurso de destino cree o actualice su estado con el estado definido por la representación incluida en la solicitud. Una diferencia con POST es que el cliente especifica la ubicación de destino en el servidor. [55]

BORRAR
El método DELETE solicita que el recurso de destino elimine su estado.

CONECTAR
El método CONNECT solicita que el intermediario establezca un túnel TCP/IP hacia el servidor de origen identificado por el destino de la solicitud. Suele utilizarse para proteger conexiones a través de uno o más servidores proxy HTTP con TLS . [56] [57] Consulte el método HTTP CONNECT .

OPCIONES
El método OPCIONES solicita que el recurso de destino transfiera los métodos HTTP que admite. Esto se puede utilizar para comprobar la funcionalidad de un servidor web solicitando '*' en lugar de un recurso específico.

RASTRO
El método TRACE solicita que el recurso de destino transfiera la solicitud recibida en el cuerpo de la respuesta. De esa manera, un cliente puede ver qué cambios o adiciones (si los hay) han realizado los intermediarios.

PARCHE
El método PATCH solicita que el recurso de destino modifique su estado de acuerdo con la actualización parcial definida en la representación adjunta a la solicitud. Esto puede ahorrar ancho de banda al actualizar una parte de un archivo o documento sin tener que transferirlo por completo. [58]

Todos los servidores web de propósito general deben implementar al menos los métodos GET y HEAD, y la especificación considera que todos los demás métodos son opcionales. [51]

Métodos seguros

Un método de solicitud es seguro si una solicitud con ese método no tiene ningún efecto previsto en el servidor. Los métodos GET, HEAD, OPTIONS y TRACE se definen como seguros. En otras palabras, los métodos seguros están pensados ​​para ser de solo lectura . Sin embargo , no excluyen los efectos secundarios , como agregar información de solicitud a un archivo de registro o cargar una cuenta publicitaria , ya que, por definición, no son solicitados por el cliente.

Por el contrario, los métodos POST, PUT, DELETE, CONNECT y PATCH no son seguros. Podrán modificar el estado del servidor o tener otros efectos como el envío de un correo electrónico . Por lo tanto, estos métodos no suelen ser utilizados por robots o rastreadores web conformes; algunos que no se ajustan tienden a hacer solicitudes sin tener en cuenta el contexto o las consecuencias.

A pesar de la seguridad prescrita para las solicitudes GET, en la práctica su manejo por parte del servidor no está técnicamente limitado de ningún modo. La programación descuidada o deliberadamente irregular puede permitir que las solicitudes GET provoquen cambios no triviales en el servidor. Esto no se recomienda debido a los problemas que pueden ocurrir cuando el almacenamiento en caché web , los motores de búsqueda y otros agentes automatizados realizan cambios no deseados en el servidor. Por ejemplo, un sitio web podría permitir la eliminación de un recurso a través de una URL como https://example.com/article/1234/delete , que, si se recupera arbitrariamente, incluso usando GET, simplemente eliminaría el artículo. [59] Un sitio web correctamente codificado requeriría un método DELETE o POST para esta acción, que los robots no maliciosos no realizarían.

Un ejemplo de esto ocurrió en la práctica durante la versión beta de corta duración de Google Web Accelerator , que precargaba direcciones URL arbitrarias en la página que un usuario estaba viendo, lo que provocaba que los registros se alteraran o eliminaran automáticamente en masa . La versión beta fue suspendida sólo unas semanas después de su primer lanzamiento, tras críticas generalizadas. [60] [59]

Métodos idempotentes

Un método de solicitud es idempotente si varias solicitudes idénticas con ese método tienen el mismo efecto que una sola solicitud. Los métodos PUT y DELETE, y los métodos seguros se definen como idempotentes. Los métodos seguros son trivialmente idempotentes, ya que no pretenden tener ningún efecto en el servidor; Mientras tanto, los métodos PUT y DELETE son idempotentes ya que se ignorarán solicitudes idénticas sucesivas. Un sitio web podría, por ejemplo, configurar un punto final PUT para modificar la dirección de correo electrónico registrada de un usuario. Si este punto final está configurado correctamente, cualquier solicitud que solicite cambiar la dirección de correo electrónico de un usuario a la misma dirección de correo electrónico que ya está registrada (por ejemplo, solicitudes duplicadas después de una solicitud exitosa) no tendrá ningún efecto. De manera similar, una solicitud para ELIMINAR a un determinado usuario no tendrá ningún efecto si ese usuario ya ha sido eliminado.

Por el contrario, los métodos POST, CONNECT y PATCH no son necesariamente idempotentes y, por lo tanto, enviar una solicitud POST idéntica varias veces puede modificar aún más el estado del servidor o tener efectos adicionales, como enviar varios correos electrónicos . En algunos casos este es el efecto deseado, pero en otros puede ocurrir accidentalmente. Un usuario podría, por ejemplo, enviar sin darse cuenta varias solicitudes POST haciendo clic nuevamente en un botón si no recibió información clara de que se estaba procesando el primer clic. Si bien los navegadores web pueden mostrar cuadros de diálogo de alerta para advertir a los usuarios en algunos casos en los que recargar una página puede volver a enviar una solicitud POST, generalmente depende de la aplicación web manejar los casos en los que una solicitud POST no debe enviarse más de una vez.

Tenga en cuenta que el protocolo o el servidor web no impone si un método es idempotente o no. Es perfectamente posible escribir una aplicación web en la que (por ejemplo) una inserción de base de datos u otra acción no idempotente se active mediante una solicitud GET u otra. Sin embargo, hacerlo en contra de las recomendaciones puede tener consecuencias indeseables si un agente de usuario asume que repetir la misma solicitud es seguro cuando no lo es.

Métodos almacenables en caché

Un método de solicitud se puede almacenar en caché si las respuestas a las solicitudes con ese método pueden almacenarse para su reutilización futura. Los métodos GET, HEAD y POST se definen como almacenables en caché.

Por el contrario, los métodos PUT, DELETE, CONNECT, OPTIONS, TRACE y PATCH no se pueden almacenar en caché.

Solicitar campos de encabezado

Los campos de encabezado de solicitud permiten al cliente pasar información adicional más allá de la línea de solicitud, actuando como modificadores de solicitud (de manera similar a los parámetros de un procedimiento). Proporcionan información sobre el cliente, sobre el recurso de destino o sobre el manejo esperado de la solicitud.

Mensajes de respuesta HTTP/1.1

Un servidor envía un mensaje de respuesta a un cliente como respuesta a su mensaje de solicitud anterior. [nota 4]

Sintaxis de respuesta

Un servidor envía mensajes de respuesta al cliente, que constan de: [46]

Códigos de estado de respuesta

En HTTP/1.0 y desde entonces, la primera línea de la respuesta HTTP se denomina línea de estado e incluye un código de estado numérico (como " 404 ") y una frase textual de motivo (como "No encontrado"). El código de estado de respuesta es un código entero de tres dígitos que representa el resultado del intento del servidor de comprender y satisfacer la solicitud correspondiente del cliente. La forma en que el cliente maneja la respuesta depende principalmente del código de estado y, en segundo lugar, de los demás campos del encabezado de la respuesta. Es posible que los clientes no comprendan todos los códigos de estado registrados, pero deben comprender su clase (dada por el primer dígito del código de estado) y tratar un código de estado no reconocido como equivalente al código de estado x00 de esa clase.

Las frases de motivo estándar son sólo recomendaciones y pueden sustituirse por "equivalentes locales" a discreción del desarrollador web . Si el código de estado indicaba un problema, el agente de usuario podría mostrar la frase del motivo al usuario para proporcionar más información sobre la naturaleza del problema. El estándar también permite que el agente de usuario intente interpretar la frase de motivo , aunque esto podría no ser prudente ya que el estándar especifica explícitamente que los códigos de estado son legibles por máquina y las frases de motivo son legibles por humanos.

El primer dígito del código de estado define su clase:

1XX(informativo)
La solicitud fue recibida, continuando el proceso.
2XX(exitoso)
La solicitud fue recibida, comprendida y aceptada exitosamente.
3XX(redirección)
Es necesario tomar más medidas para completar la solicitud.
4XX(error del cliente)
La solicitud contiene una sintaxis incorrecta o no se puede cumplir.
5XX(Error del Servidor)
El servidor no cumplió con una solicitud aparentemente válida.

Campos de encabezado de respuesta

Los campos del encabezado de respuesta permiten al servidor pasar información adicional más allá de la línea de estado, actuando como modificadores de respuesta. Proporcionan información sobre el servidor o sobre el acceso adicional al recurso de destino o recursos relacionados.

Cada campo de encabezado de respuesta tiene un significado definido que puede refinarse aún más mediante la semántica del método de solicitud o el código de estado de respuesta.

Ejemplo HTTP/1.1 de transacción de solicitud/respuesta

A continuación se muestra un ejemplo de transacción HTTP entre un cliente HTTP/1.1 y un servidor HTTP/1.1 que se ejecuta en www.example.com , puerto 80. [nota 5] [nota 6]

Solicitud de cliente

GET  /  HTTP / 1.1 Host :  www.example.com Agente de usuario :  Mozilla/5.0 Aceptar :  text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/* ;q=0.8 Idioma de aceptación :  en-GB,en;q=0.5 Codificación de aceptación :  gzip, deflate, br Conexión :  keep-alive

Una solicitud de cliente (que en este caso consta de la línea de solicitud y algunos encabezados que se pueden reducir a solo el "Host: hostname"encabezado) va seguida de una línea en blanco, de modo que la solicitud termina con un doble final de línea, cada uno en forma de retorno de carro seguido de un avance de línea . El "Host: hostname"valor del encabezado distingue entre varios nombres DNS que comparten una única dirección IP , lo que permite el alojamiento virtual basado en nombres . Aunque es opcional en HTTP/1.0, es obligatorio en HTTP/1.1. (Una "/" (barra oblicua) normalmente recuperará un archivo /index.html si lo hay).

Respuesta del servidor

HTTP / 1.1  200  OK Fecha :  lunes 23 de mayo de 2005 22:38:34 GMT Tipo de contenido :  texto/html; charset=UTF-8 Longitud del contenido :  155 Última modificación :  miércoles, 8 de enero de 2003 23:11:55 GMT Servidor :  Apache/1.3.3.7 (Unix) (Red-Hat/Linux) ETag :  "3f80f-1b6-3e1cb03b " Aceptar rangos :  bytes Conexión :  cerrar< html >  < head >  < title > Una página de ejemplo </ title >  </ head >  < body >  < p > Hola mundo, este es un documento HTML muy simple. </p> </body> </html> _  _ _ _ _ _

El campo de encabezado ETag (etiqueta de entidad) se utiliza para determinar si una versión almacenada en caché del recurso solicitado es idéntica a la versión actual del recurso en el servidor. "Content-Type"especifica el tipo de medio de Internet de los datos transmitidos por el mensaje HTTP, mientras que "Content-Length"indica su longitud en bytes. El servidor web HTTP/1.1 publica su capacidad para responder a solicitudes de ciertos rangos de bytes del documento configurando el campo "Accept-Ranges: bytes". Esto es útil si el cliente necesita tener solo ciertas partes [61] de un recurso enviado por el servidor, lo que se denomina servicio de bytes . Cuando "Connection: close"se envía, significa que el servidor web cerrará la conexión TCP inmediatamente después de finalizar la transferencia de esta respuesta. [21]

La mayoría de las líneas de encabezado son opcionales, pero algunas son obligatorias. Cuando "Content-Length: number"falta el encabezado en una respuesta con un cuerpo de entidad, esto debe considerarse un error en HTTP/1.0, pero puede no ser un error en HTTP/1.1 si el encabezado "Transfer-Encoding: chunked"está presente. La codificación de transferencia fragmentada utiliza un tamaño de fragmento de 0 para marcar el final del contenido. Algunas implementaciones antiguas de HTTP/1.0 omitían el encabezado "Content-Length"cuando no se conocía la longitud de la entidad del cuerpo al comienzo de la respuesta, por lo que la transferencia de datos al cliente continuaba hasta que el servidor cerraba el socket.

A se puede utilizar para informar al cliente que la parte de la entidad del cuerpo de los datos transmitidos está comprimida mediante el algoritmo gzip."Content-Encoding: gzip"

Conexiones cifradas

La forma más popular de establecer una conexión HTTP cifrada es HTTPS . [62] También existen otros dos métodos para establecer una conexión HTTP cifrada: el Protocolo seguro de transferencia de hipertexto y el uso del encabezado de actualización HTTP/1.1 para especificar una actualización a TLS. Sin embargo, la compatibilidad del navegador con estos dos es casi inexistente. [63] [64] [65]

Protocolos similares

Ver también

Notas

  1. ^ En la práctica, estos flujos se utilizan como múltiples subconexiones TCP/IP para multiplexar solicitudes/respuestas simultáneas, lo que reduce en gran medida el número de conexiones TCP/IP reales en el lado del servidor, de 2..8 por cliente a 1, y permite muchos más clientes para ser atendidos a la vez.
  2. ^ En 2022, la compatibilidad con HTTP/0.9 no ha quedado oficialmente obsoleta por completo y todavía está presente en muchos servidores web y navegadores (solo para respuestas del servidor), incluso si generalmente está deshabilitada. No está claro cuánto tiempo llevará desmantelar HTTP/0.9.
  3. ^ Desde finales de 1996, algunos desarrolladores de navegadores y servidores HTTP/1.0 populares (especialmente aquellos que también habían planeado soporte para HTTP/1.1) comenzaron a implementar (como una extensión no oficial) una especie de mecanismo de mantenimiento de vida (mediante el uso de nuevos encabezados HTTP) para mantener la conexión TCP/IP abierta para más de un par de solicitud/respuesta y así acelerar el intercambio de múltiples solicitudes/respuestas. [31]
  4. ^ ab HTTP/2 y HTTP/3 tienen una representación diferente para los métodos y encabezados HTTP.
  5. ^ HTTP/1.0 tiene los mismos mensajes excepto por algunos encabezados que faltan.
  6. ^ HTTP/2 y HTTP/3 utilizan el mismo mecanismo de solicitud/respuesta pero con diferentes representaciones para los encabezados HTTP.

Referencias

  1. ^ abcd Fielding, R.; Nottingham, M.; Reschke, J. (junio de 2022). Semántica HTTP. IETF. doi : 10.17487/RFC9110 . RFC 9110.
  2. ^ abcd Tim Berner-Lee (1 de enero de 1991). "El HTTP original tal como se definió en 1991". www.w3.org . Consorcio Mundial de la red . Consultado el 24 de julio de 2010 .
  3. ^ ab Tim Berner-Lee (1992). "HTTP básico tal como se definió en 1992". www.w3.org . Consorcio Mundial de la red . Consultado el 19 de octubre de 2021 .
  4. ^ En RFC  1945. Esa especificación fue luego superada por HTTP/1.1.
  5. ^ RFC  2068 (1997) quedó obsoleto por RFC  2616 en 1999, que quedó obsoleto por RFC  7230 en 2014, que quedó obsoleto por RFC  9110 en 2022.
  6. ^ "Estadísticas de uso del protocolo https predeterminado para sitios web". w3techs.com . Consultado el 5 de enero de 2024 .
  7. ^ "Estadísticas de uso de HTTP/2 para sitios web". w3techs.com . Consultado el 5 de enero de 2024 .
  8. ^ "¿Puedo usar... tablas de soporte para HTML5, CSS3, etc.?". caniuse.com . Consultado el 5 de enero de 2024 .
  9. ^ Friedl, S.; Popov, A.; Langley, A.; Stephan, E. (julio de 2014). Extensión de negociación del protocolo de capa de aplicación de Seguridad de la capa de transporte (TLS). IETF. doi : 10.17487/RFC7301 . RFC 7301.
  10. ^ Belshe, M.; Peón, R.; Thomson, M. "Protocolo de transferencia de hipertexto versión 2, uso de funciones TLS". Archivado desde el original el 15 de julio de 2013 . Consultado el 10 de febrero de 2015 .
  11. ^ Benjamín, David. Usando TLS 1.3 con HTTP/2. doi : 10.17487/RFC8740 . RFC 8740 . Consultado el 2 de junio de 2020 . Esto reduce la barrera para implementar TLS 1.3, una importante mejora de seguridad con respecto a TLS 1.2.
  12. ^ HTTP/3. 6 de junio de 2022. doi : 10.17487/RFC9114 . RFC 9114 . Consultado el 6 de junio de 2022 .
  13. ^ "Estadísticas de uso de HTTP/3 para sitios web". w3techs.com . Consultado el 8 de enero de 2024 .
  14. ^ "¿Puedo usar... tablas de soporte para HTML5, CSS3, etc.?". canIuse.com . Consultado el 8 de enero de 2024 .
  15. ^ Cimpanu, Catalin (26 de septiembre de 2019). "Cloudflare, Google Chrome y Firefox añaden compatibilidad con HTTP/3". ZDNet . Consultado el 27 de septiembre de 2019 .
  16. ^ "HTTP/3: el pasado, el presente y el futuro". El blog de Cloudflare . 2019-09-26 . Consultado el 30 de octubre de 2019 .
  17. ^ "Firefox Nightly admite HTTP 3 - General - Comunidad Cloudflare". 2019-11-19 . Consultado el 23 de enero de 2020 .
  18. ^ "HTTP/3 es rápido". Solicitar métricas . Consultado el 1 de julio de 2022 .
  19. ^ abc "Conexiones, clientes y servidores". RFC 9110, Semántica HTTP. segundo. 3.3. doi : 10.17487/RFC9110 . RFC 9110.
  20. ^ "Operación general". RFC 1945, págs. 6–8. segundo. 1.3. doi : 10.17487/RFC1945 . RFC 1945.
  21. ^ abc "Gestión de conexiones: establecimiento". RFC 9112, HTTP/1.1. segundo. 9.1. doi : 10.17487/RFC9112 . RFC 9112.
  22. ^ "Gestión de conexiones: persistencia". RFC 9112, HTTP/1.1. segundo. 9.3. doi : 10.17487/RFC9112 . RFC 9112.
  23. ^ "Documentos HTTP clásicos". W3.org. 14 de mayo de 1998 . Consultado el 1 de agosto de 2010 .
  24. ^ "Descripción general del protocolo HTTP/2". RFC 9113, HTTP/2). segundo. 2.doi : 10.17487 /RFC7540 . RFC 7540.
  25. ^ "Invención de la Web, Historia de la Web, Quién inventó la Web, Tim Berners-Lee, Robert Cailliau, CERN, Primer servidor web". Vivir Internet . Consultado el 11 de agosto de 2021 .
  26. ^ Berners-Lee, Tim (2 de octubre de 1990). "daemon.c: servidor basado en TCP/IP para hipertexto". www.w3.org . Consultado el 11 de agosto de 2021 .
  27. ^ Berners-Lee, Tim. "Protocolo de Transferencia de Hipertexto". Consorcio Mundial de la red . Consultado el 31 de agosto de 2010 .
  28. ^ Raggett, Dave. "Biografía de Dave Raggett". Consorcio Mundial de la red . Consultado el 11 de junio de 2010 .
  29. ^ Raggett, Dave; Berners-Lee, Tim. "Grupo de trabajo sobre protocolo de transferencia de hipertexto". Consorcio Mundial de la red . Consultado el 29 de septiembre de 2010 .
  30. ^ Raggett, Dave. "Planes del GT GT". Consorcio Mundial de la red . Consultado el 29 de septiembre de 2010 .
  31. ^ ab David Gourley; Brian Totty; Marjorie Sayer; Anshu Aggarwal; Sailu Reddy (2002). HTTP: la guía definitiva. (extracto del capítulo: "Conexiones persistentes"). O'Reilly Media, inc. ISBN 9781565925090. Consultado el 18 de octubre de 2021 .
  32. ^ "HTTP/1.1". Entrada del glosario de Webcom.com . Archivado desde el original el 21 de noviembre de 2001 . Consultado el 29 de mayo de 2009 .
  33. ^ "Grupo de trabajo HTTP-NG". www.w3.org . Consorcio Mundial de la red. 1997 . Consultado el 19 de octubre de 2021 .
  34. ^ Administrador web (2007). "Grupo de trabajo HTTP". httpwg.org . IETF . Consultado el 19 de octubre de 2021 .
  35. ^ ab Administrador web (2007). "Grupo de trabajo HTTP: estatuto httpbis". datatracker.ietf.org . IETF . Consultado el 19 de octubre de 2021 .
  36. ^ "SPDY: un protocolo experimental para una web más rápida". dev.chromium.org . Google. 2009-11-01 . Consultado el 19 de octubre de 2021 .
  37. ^ "Recarga httpbis". IETF; Grupo de Trabajo HTTP. 24 de enero de 2012 . Consultado el 19 de octubre de 2021 .
  38. ^ Secretario del IESG (19 de marzo de 2012). "Acción del GT: RECHARTER: Protocolo de transferencia de hipertexto Bis (httpbis)". IETF; Grupo de trabajo HTTP . Consultado el 19 de octubre de 2021 .
  39. ^ Iliá Grigorik; Surma (03 de septiembre de 2019). "Redes de navegador de alto rendimiento: introducción a HTTP/2". desarrolladores.google.com . Corporación Google . Consultado el 19 de octubre de 2021 .
  40. ^ "Apéndice A: Historial de versiones HTTP". RFC 7230, HTTP/1.1: Sintaxis y enrutamiento de mensajes. pag. 78. seg. A.doi : 10.17487 /RFC7230 . RFC 7230.
  41. ^ Matt Menke (30 de junio de 2016). "Intención de desaprobar y eliminar: compatibilidad con HTTP/0.9". grupos.google.com . Consultado el 15 de octubre de 2021 .
  42. ^ HTTP/3. 6 de junio de 2022. doi : 10.17487/RFC9114 . RFC 9114 . Consultado el 6 de junio de 2022 .
  43. ^ "Esquema de URI http". RFC 9110, Semántica HTTP. segundo. 4.2.1. doi : 10.17487/RFC9110 . RFC 9110.
  44. ^ "Esquema https URI". RFC 9110, Semántica HTTP. segundo. 4.2.2. doi : 10.17487/RFC9110 . RFC 9110.
  45. ^ Lee, Wei-Bin; Chen, Hsing-Bai; Chang, Shun-Shyan; Chen, Tzung-Her (25 de enero de 2019). "Protección segura y eficiente para cookies HTTP con autoverificación". Revista Internacional de Sistemas de Comunicación . 32 (2): e3857. doi :10.1002/dac.3857. S2CID  59524143.
  46. ^ ab "Formato de mensaje". RFC 9112: HTTP/1.1. segundo. 2.1. doi : 10.17487/RFC9112 . RFC 9112.
  47. ^ "Semana Apache. HTTP/1.1".090502 apacheweek.com
  48. ^ Berners-Lee, Tim; Fielding, Roy T.; Nielsen, Henrik Frystyk. "Definiciones de métodos". Protocolo de transferencia de hipertexto: HTTP/1.0. IETF. págs. 30–32. segundo. 8.doi : 10.17487 /RFC1945 . RFC 1945.
  49. ^ "Definiciones de métodos". RFC 2616, págs. 51–57. segundo. 9.doi : 10.17487 /RFC2616 . RFC 2616.
  50. ^ "Línea de solicitud". RFC 9112, HTTP/1.1. segundo. 3.doi : 10.17487 /RFC9112 . RFC 9112.
  51. ^ ab "Métodos: descripción general". RFC 9110, Semántica HTTP. segundo. 9.1. doi : 10.17487/RFC9110 . RFC 9110.
  52. ^ "Campos de encabezado". RFC 9110, Semántica HTTP. segundo. 6.3. doi : 10.17487/RFC9110 . RFC 9110.
  53. ^ Jacobs, Ian (2004). "URI, direccionabilidad y uso de HTTP GET y POST". Hallazgo del Grupo Técnico de Arquitectura . W3C . Consultado el 26 de septiembre de 2010 .
  54. ^ "PUBLICAR". RFC 9110, Semántica HTTP. segundo. 9.3.3. doi : 10.17487/RFC9110 . RFC 9110.
  55. ^ "PONER". RFC 9110, Semántica HTTP. segundo. 9.3.4. doi : 10.17487/RFC9110 . RFC 9110.
  56. ^ "CONECTAR". RFC 9110, Semántica HTTP. segundo. 9.3.6. doi : 10.17487/RFC9110 . RFC 9110.
  57. ^ "Nota de vulnerabilidad VU#150227: las configuraciones predeterminadas del proxy HTTP permiten conexiones TCP arbitrarias". CERT de EE. UU . 2002-05-17 . Consultado el 10 de mayo de 2007 .
  58. ^ Dusseault, Lisa; Snell, James M. (marzo de 2010). Método PATCH para HTTP. IETF. doi : 10.17487/RFC5789 . RFC 5789.
  59. ^ ab Ediger, Brad (21 de diciembre de 2007). Advanced Rails: creación de aplicaciones web de potencia industrial en un tiempo récord. O'Reilly Media, Inc. pág. 188.ISBN _ 978-0596519728. Un error común es utilizar GET para una acción que actualiza un recurso. [...] Este problema salió a la luz pública de Rails en 2005, cuando se lanzó Google Web Accelerator.
  60. ^ Cantrell, cristiano (1 de junio de 2005). "¿Qué hemos aprendido del Google Web Accelerator?". Blogs de Adobe . Adobe. Archivado desde el original el 19 de agosto de 2017 . Consultado el 19 de noviembre de 2018 .
  61. ^ Luotonen, Ari; Franks, John (22 de febrero de 1996). Extensión de recuperación de rango de bytes a HTTP. IETF. ID borrador-ietf-http-range-retrieval-00.
  62. ^ Canavan, John (2001). Fundamentos de seguridad de redes . Norwood, MA: Casa Artech. págs. 82–83. ISBN 9781580531764.
  63. ^ Zalewski, Michal. "Manual de seguridad del navegador" . Consultado el 30 de abril de 2015 .
  64. ^ "Chromium Issue 4527: implementar RFC 2817: actualización a TLS dentro de HTTP/1.1" . Consultado el 30 de abril de 2015 .
  65. ^ "Mozilla Bug 276813 - [RFE] Admite actualización RFC 2817 / TLS para HTTP 1.1" . Consultado el 30 de abril de 2015 .
  66. ^ Nottingham, Mark (octubre de 2010). Enlaces web. IETF. doi : 10.17487/RFC5988 . RFC 5988.

enlaces externos