jueves, 10 de marzo de 2016

ADIOS HTTP 1, HOLA HTTP2

El gran HTTP, ha evolucionado a la version 2. El protocolo inventado por cientificos del CERN, para la comunicacion entre sistemas distribuidos, se ha actualizado para dar soporte a nuevas formas de comunicacion.

Que es el HTTP/2?

En febrero del 2015 se actualizó el protocolo HTTP. Aunque la nueva versión sigue siendo compatible con la primera version. Está basado en el protocolo SPDY de Google

La gran diferencia entre la primera version y la segunda, es la latencia. En la primera version, para descargarse una web desde el servidor al navegador, se necesitan tantas peticiones como recursos de la web (css,js,imagenes,...) se necesiten. En HTTP/2 tan solo una conexión TCP.

HTTP/2
Arriba HTTP version 1. Abajo, la segunda version
HTTP/2 mantiene los codigos de estado y los metodos (PUT,GET,POST,...). Aunque en sus cabeceras se encuentran las siguientes diferencias:
  • Compresion, eliminando informacion redundante.
  • Cabeceras en formato binario y no en texto.
  • Server-Push. De una peticion TCP del navegador, obtener tantos recursos como se necesite.
  • Multiplexacion. Enviar varias peticiones a la vez. Asi resolviendo el problema de Head-of-line blocking
  • No requiere TLS.

Formato de la trama

Tamaño maximo de 16Kb.

Trama HTTP/2
Trama de HTTP/2


  •  Length: Longitud de la trama
  • Type: Determina el formato y la semantica de la trama.
  • Flags: 8 bits para indicar el tipo de trama.
  • R: bit reservado.
  • Stream Identifier: Identificador del stream. 

Control de flujo

HTTP/2 provee un control de flujo a traves de la trama WINDOW_UPDATE. Los receptores anuncian el numero de octetos que están preparados recibir en una trasmision y para toda la conexion TCP. El emisor debe respetar el tamaño de la ventana que ha limitado el receptor.

WINDOW UPDATE
Trama WINDOW_UPDATE
Cuando se establece una conexion HTTP/2, se crean nuevos streams con ventanas de control de flujo del tamaño de 65535 bytes. Los endpoint pueden cambiar el tamaño de las tramas para nuevos streams, cambiando el valor de SETTINGS_INITIAL_WINDOW_SIZE en la trama SETTINGS. El tamaño de la trama de la conexion solo se puede cambiar con tramas de WINDOW UPDATE

Que navegadores lo soportan?

Navegadores y sus versiones que soportan HTTP/2