HTTP 1.0 vs 1.1

263

¿Podría alguien darme una breve descripción de las diferencias entre HTTP 1.0 y HTTP 1.1? He pasado algún tiempo con ambos RFC, pero no he podido sacar mucha diferencia entre ellos. Wikipedia dice esto:

HTTP / 1.1 (1997-1999)

Versión actual; las conexiones persistentes están habilitadas de manera predeterminada y funcionan bien con servidores proxy. También admite la canalización de solicitudes, lo que permite el envío de múltiples solicitudes al mismo tiempo, lo que permite que el servidor se prepare para la carga de trabajo y potencialmente transfiera los recursos solicitados más rápidamente al cliente.

Pero eso no significa mucho para mí. Me doy cuenta de que este es un tema algo complicado, así que no espero una respuesta completa, pero ¿alguien puede darme una breve descripción de las diferencias en un nivel un poco más bajo?
Con esto quiero decir que estoy buscando la información que necesitaría saber para implementar un servidor HTTP o una aplicación. Principalmente estoy buscando un empujón en la dirección correcta para poder resolverlo por mi cuenta.

Jason Baker
fuente
Este es un buen resumen de las diferencias clave: http://www.research.att.com/~bala/papers/h0vh1.html
Kev
3
Bien por ti para ir a la fuente. Parece que no sabes mucho sobre redes en general, si no entiendes ese resumen. Quizás deberías investigar esos términos también.
Marcin
44
Aunque todavía soy un novato cuando se trata de estas cosas, mi problema principal es que el resumen me da más "qué" en lugar de "cómo".
Jason Baker,

Respuestas:

363

Soporte de proxy y el campo Host:

HTTP 1.1 tiene un encabezado de host requerido por especificación.

HTTP 1.0 no requiere oficialmente un encabezado de Host, pero no está de más agregar uno, y muchas aplicaciones (proxies) esperan ver el encabezado de Host independientemente de la versión del protocolo.

Ejemplo:

GET / HTTP/1.1
Host: www.blahblahblahblah.com

Este encabezado es útil porque le permite enrutar un mensaje a través de servidores proxy y también porque su servidor web puede distinguir entre diferentes sitios en el mismo servidor.

Esto significa que si tiene blahblahlbah.com y helohelohelo.com, ambos apuntan a la misma IP. Su servidor web puede usar el campo Host para distinguir qué sitio quiere la máquina cliente.

Conexiones persistentes:

HTTP 1.1 también le permite tener conexiones persistentes, lo que significa que puede tener más de una solicitud / respuesta en la misma conexión HTTP.

En HTTP 1.0 tenía que abrir una nueva conexión para cada par de solicitud / respuesta. Y después de cada respuesta, la conexión se cerraría. Esto conduce a algunos grandes problemas de eficiencia debido a TCP Slow Start .

Método de opciones:

HTTP / 1.1 introduce el método OPTIONS. Un cliente HTTP puede usar este método para determinar las capacidades del servidor HTTP. Se usa principalmente para compartir recursos de origen cruzado en aplicaciones web.

Almacenamiento en caché:

HTTP 1.0 tenía soporte para el almacenamiento en caché a través del encabezado: If-Modified-Since.

HTTP 1.1 se expande mucho en el soporte de almacenamiento en caché mediante el uso de algo llamado 'etiqueta de entidad'. Si 2 recursos son iguales, tendrán las mismas etiquetas de entidad.

HTTP 1.1 también agrega los encabezados condicionales If-Unmodified-Since, If-Match, If-None-Match.

También hay más adiciones relacionadas con el almacenamiento en caché, como el encabezado Cache-Control.

100 Continuar estado:

Hay un nuevo código de retorno en HTTP / 1.1 100 Continuar. Esto es para evitar que un cliente envíe una solicitud grande cuando ese cliente ni siquiera está seguro de si el servidor puede procesar la solicitud o si está autorizado para procesarla. En este caso, el cliente envía solo los encabezados y el servidor le dirá al cliente 100 Continuar, continúe con el cuerpo.

Mucho más:

  • Autenticación implícita y autenticación proxy
  • Nuevos códigos de estado adicionales
  • Codificación de transferencia fragmentada
  • Encabezado de conexión
  • Soporte de compresión mejorado
  • Mucho mucho mas.
Brian R. Bondy
fuente
15
Tenga en cuenta que muchos servidores / servidores proxy que afirman que desean HTTP / 1.0 se molestarán mucho si omite el encabezado Host.
Paul Tomblin
2
HTTP 1.0 tiene soporte para la compresión a través del encabezado Content-Encoding. Como Paul mencionó, definitivamente recomendaría a cualquier cliente HTTP / 1.0 que envíe el encabezado Host, ya que no está estrictamente prohibido hacerlo y las cosas funcionarán más a menudo como lo espera. De lo contrario, esto está muerto.
cpm
@ Paul Tomblin: Gracias agregué esta información.
Brian R. Bondy
2
Con respecto a "si tiene blahblahlbah.com y helohelohelo.com, ambos apuntan a la misma IP. Su servidor web puede usar el campo Host para distinguir qué sitio quiere la máquina cliente". Entonces, ¿qué sucede cuando un cliente HTTP 1.0 no nos da un campo de host para distinguir?
Pacerier
@Pacerier suele ser una página predeterminada de algún tipo; Depende del servidor.
Andrew Lambert
14

 HTTP 1.0 (1994)

  • Todavía está en uso
  • Puede ser utilizado por un cliente que no puede manejar respuestas de servidor fragmentadas (o comprimidas)

 HTTP 1.1 (1996-2015)

  • Formaliza muchas extensiones a la versión 1.0
  • Admite conexiones persistentes y canalizadas
  • Admite transferencias fragmentadas, compresión / descompresión
  • Admite alojamiento virtual (un servidor con una sola dirección IP que aloja varios dominios)
  • Soporta múltiples idiomas.
  • Admite transferencias de rango de bytes; útil para reanudar transferencias de datos interrumpidas

HTTP 1.1 es una mejora de HTTP 1.0. A continuación se enumeran las cuatro mejoras principales:

  1. Uso eficiente de las direcciones IP, al permitir que se sirvan múltiples dominios desde una sola dirección IP.

  2. Respuesta más rápida, al permitir que un navegador web envíe múltiples solicitudes a través de una única conexión persistente.

  3. Respuesta más rápida para páginas generadas dinámicamente, mediante soporte para codificación fragmentada, que permite enviar una respuesta antes de que se conozca su longitud total.
  4. Respuesta más rápida y grandes ahorros de ancho de banda, al agregar compatibilidad con caché.
i_thamary
fuente
9

Para aplicaciones triviales (por ejemplo, recuperar esporádicamente un valor de temperatura de un termómetro habilitado para web) HTTP 1.0 está bien tanto para un cliente como para un servidor. Puede escribir un cliente o servidor HTTP 1.0 básico basado en sockets en aproximadamente 20 líneas de código.

Para escenarios más complicados, HTTP 1.1 es el camino a seguir. Espere un aumento de 3 a 5 veces en el tamaño del código para lidiar con las complejidades del protocolo HTTP 1.1 más complejo. La complejidad se debe principalmente a que, en HTTP 1.1, deberá crear, analizar y responder a varios encabezados. Puede proteger su aplicación de esta complejidad haciendo que un cliente use una biblioteca HTTP o un servidor use un servidor de aplicaciones web.

Diomidis Spinellis
fuente
7

Un problema clave de compatibilidad es el soporte para conexiones persistentes . Recientemente trabajé en un servidor que "soportaba" HTTP / 1.1, pero no pude cerrar la conexión cuando un cliente envió una solicitud HTTP / 1.0. Al escribir un servidor que admita HTTP / 1.1, asegúrese de que también funcione bien con clientes HTTP / 1.0 únicamente.

Troy J. Farrell
fuente
8
¿HTTP / 1.1 requiere que seamos compatibles con HTTP / 1.0?
Pacerier
@Troy: ¿es válido enviar una respuesta a una solicitud HTTP 1.1 e inmediatamente cerrar la conexión (socket desde el que se leyó la solicitud en el servidor)? Lo que prácticamente significa que el servidor implementa HTTP 1.0
Guy Avraham
5

Una de las primeras diferencias que puedo recordar desde la parte superior de mi cabeza son los múltiples dominios que se ejecutan en el mismo servidor, la recuperación parcial de recursos, esto le permite recuperar y acelerar la descarga de un recurso (es lo que hacen casi todos los aceleradores de descarga).

Si desea desarrollar una aplicación como un sitio web o similar, no necesita preocuparse demasiado por las diferencias, pero debe saber la diferencia entre GETyPOST verbos.

Ahora, si desea desarrollar un navegador, sí, tendrá que conocer el protocolo completo, así como si está tratando de desarrollar un servidor HTTP.

Si solo está interesado en conocer el protocolo HTTP, le recomendaría comenzar con HTTP / 1.1 en lugar de 1.0.

Leandro López
fuente
1
Me parece que Jason ya conoce la diferencia entre GET y POST si está considerando construir su propio servidor / aplicación HTTP desde cero. :)
Kev
1
De hecho, he trabajado con un servidor web que actualmente solo admite HTTP 1.0, me preguntaba qué implica agregar el soporte 1.1.
Jason Baker
2

HTTP 1.1 es la última versión del Protocolo de transferencia de hipertexto, el protocolo de aplicación World Wide Web que se ejecuta sobre el conjunto de protocolos TCP / IP de Internet. en comparación con HTTP 1.0, HTTP 1.1 proporciona una entrega más rápida de páginas web que el HTTP original y reduce el tráfico web.

Tráfico web Ejemplo: por ejemplo, si está accediendo a un servidor. Al mismo tiempo, tantos usuarios están accediendo al servidor para obtener los datos. Entonces existe la posibilidad de colgar el servidor. Este es el tráfico web.

Krishna Mohan
fuente
1

HTTP 1.1 viene con el encabezado de host en su especificación, mientras que HTTP 1.0 no tiene oficialmente un encabezado de host, pero no se niega a agregar uno.

El encabezado del host es útil porque permite al cliente enrutar un mensaje a través del servidor proxy, y la principal diferencia entre las versiones 1.0 y 1.1 HTTP son:

  1. HTTP 1.1 viene con conexiones persistentes que definen que podemos tener más de una solicitud o respuesta en la misma conexión HTTP.
  2. mientras que en HTTP 1.0 tienes que abrir una nueva conexión para cada solicitud y respuesta
  3. En HTTP 1.0 tiene un pragma, mientras que en HTTP 1.1 tiene Cache-Control, esto es similar a pragma
Niraj Kumar Jena
fuente
0

En comparación con 1.0, 1.1 reduce el tráfico web

Ram MVS
fuente