http http-1.1 http-1.0

HTTP 1.0 vs 1.1



http-1.1 http-1.0 (8)

¿Alguien me podría dar una breve descripción de las diferencias entre HTTP 1.0 y HTTP 1.1? He pasado un 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 forma predeterminada y funcionan bien con proxies. También admite la canalización de solicitudes, lo que permite que se envíen varias solicitudes al mismo tiempo, lo que permite al servidor prepararse para la carga de trabajo y, potencialmente, transferir 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 un tanto complicado, por lo que no espero una respuesta completa, pero ¿puede alguien 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 o una aplicación HTTP. Estoy buscando principalmente un empujón en la dirección correcta para poder resolverlo por mi cuenta.


Comparado con 1.0, 1.1 reduce el tráfico web


HTTP 1.1 es la última versión de Hypertext Transfer Protocol, el protocolo de aplicación de 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.

Ejemplo de tráfico web: por ejemplo, si está accediendo a un servidor. Al mismo tiempo, muchos usuarios acceden al servidor para obtener los datos, luego existe la posibilidad de bloquear el servidor. Esto es tráfico web.


Para aplicaciones triviales (por ejemplo, recuperar esporádicamente un valor de temperatura de un termómetro habilitado para la web) HTTP 1.0 está bien tanto para un cliente como para un servidor. Puede escribir un servidor o cliente HTTP 1.0 basado en sockets básicos 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 viene principalmente, porque en HTTP 1.1 necesitará crear, analizar y responder a varios encabezados. Puede proteger su aplicación de esta complejidad haciendo que un cliente use una biblioteca HTTP, o el servidor use un servidor de aplicaciones web.


Un problema clave de compatibilidad es el soporte para conexiones persistentes . Recientemente trabajé en un servidor que "admitía" 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 los clientes que solo tienen HTTP / 1.0.


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

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

Ahora, si desea desarrollar un navegador, entonces sí, tendrá que conocer el protocolo completo, así como si está intentando 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.


 HTTP 1.0 (1994)

  • Todavia esta 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.
  • Soporta conexiones persistentes y canalizadas.
  • Soporta transferencias fragmentadas, compresión / descompresión
  • Admite el alojamiento virtual (un servidor con una sola dirección IP que aloja varios dominios)
  • Soporta múltiples idiomas
  • Soporta 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 única 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, por 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, mediante la adición de soporte de caché.


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 se pierde nada con 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.

Entonces, 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 desea 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 se cerraría la conexión. Esto llevó a algunos grandes problemas de eficiencia debido a TCP Slow Start .

Método de opciones:

HTTP / 1.1 introduce el método OPCIONES. Un cliente HTTP puede usar este método para determinar las capacidades del servidor HTTP. Se utiliza principalmente para el uso compartido de 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 en el soporte de almacenamiento en caché mucho usando algo llamado ''etiqueta de entidad''. Si 2 recursos son iguales, entonces 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 otras 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 procesar la solicitud. En este caso, el cliente envía solo los encabezados, y el servidor le dirá al cliente 100 Continuar, siga adelante con el cuerpo.

Mucho más:

  • Autenticación de resumen y autenticación de proxy
  • Nuevos códigos de estado extra
  • Codificación de transferencia fragmentada
  • Cabecera de conexión
  • Compatibilidad con compresión mejorada
  • Mucho mucho mas.