| UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el...

Preview:

Citation preview

HTTP/2

Ing. Agustín Eijo

<agu@frlp.utn.edu.ar>

Hypertext Transfer Protocol version 2 RFC7540

HPACK - Header Compression for HTTP/2 RFC7541

HTTP – Historia:

HTTP: Solicitud/Respuesta sin estado:

GET /materias/internetworking/ HTTP/1.1Host: www.frlp.utn.edu.arConnection: keep-alivePragma: no-cacheCache-Control: no-cacheAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36Accept-Encoding: gzip, deflate, sdchAccept-Language: es-ES,es;q=0.8

HTTP/1.1 200 OKDate: Thu, 01 Oct 2015 18:22:18 GMTServer: Apache/2.0.63 (Unix) FrontPage/5.0.2.2635 PHP/4.4.9 DAV/2 mod_ssl/2.0.63 OpenSSL/0.9.8oLast-Modified: Thu, 24 Sep 2015 20:35:15 GMTETag: "171a059-2443-2b2266c0"Accept-Ranges: bytesContent-Length: 9283Content-Type: text/html; charset=ISO-8859-1Keep-Alive: timeout=15, max=100Connection: Keep-Alive

<html><head><<title>Internetworking</title></head><body> .. </body></html>

HTTP/2 – ¿Por qué?

HTTP/1.1 es enorme

Un mundo de opciones

Uso inadecuado de TCP (slow-start , límite de conexiones, SCTP)

Tamaños de transferencia y número de recursos

Latencia

Bloqueo del primero de la fila (head on line blocking)

HTTP/1.1 – Técnicas, estrategias y

trampas:

Múltiples conexiones TCP

Inicialmente el estándar HTTP/1.1 limitaba a

los browsers a no usar mas de 2 conexiones

TCP por dominio, actualmente los browser

solo crean entre 6 y 8 conexiones por

dominio.

Surge la técnica, Domain Sharding:

HTTP/1.1 – Técnicas, estrategias y

trampas: Spriting:

Concatenación:

Un gran sitio web puede tener un montón de ficheros javascript diferentes.

Ciertas herramientas de front-end ayudan a los desarrollares a juntar todos

ellos en un único paquete gigante de manera que el navegador deberá

descargar un único fichero en lugar de docenas de ficheros más

pequeños. Se envía mucha información cuando se necesita poca.

<img src="data:image/gif;base64,

R0lGODlhAQBAAAAAAABAAEAAAICTAEA

Ow==“ alt="1x1 transparent (GIF) pixel" />

inlining:

HTTP/1.1 – Técnicas, estrategias y

trampas:

HTTP Pipelining

Actualizando HTTP:

Hacer que el protocolo sea menos sensible a RTT.

Arreglar el Pipelinig y el problema del primero de la cola.

Parar la necesidad y el deseo de seguir aumentando el numero de conexiones para cada host.

Mantener todas las interfaces existentes, todo el contenido todos los formatos de URI y sus esquemas.

Esto habría de hacerse con el grupo de trabajo del IETF, HTTPbis.

HTTPbis – Límites y Restricciones:

Tiene que mantener los paradigmas HTTP. (Se mantiene como un

protocolo stateless que envía peticiones al servidor a través de TCP).

Las URLs http:// y https:// no pueden ser cambiadas.

Servidores y Clientes HTTP1 se mantendrán durante décadas, deberemos

ser capaces de hacer un proxy hacia servidores http2.

Los proxies deberán ser capaces de mapear funcionalidades http2 a

clientes HTTP 1.1 una a una.

Eliminar o reducir partes opcionales del protocolo.

No más versiones menores. Se decidió que tanto clientes como servidores serían o no compatibles con http2.

Si aparece una necesidad de extender el protocolo o modificar las cosas, entonces habrá nacido http3.

HTTP/2 – Características:

Frames Binarios, no mas texto plano.

Basado en el protocolo SPDY de google.

Conexión multiplexada, Múltiples Streams en una misma conexión TCP.

Prioridad y control de flujo por Stream.

Compresión de Headers: HPACK - Header Compression for HTTP/2 - RFC7541

PUSH desde el servidor.

HTTP/2 – Frames:

HTTP/2 – Tipo de Frames

DATA: usado para transportar el contenido del body.

HEADERS: usado para intercambiar los header en un stream.

CONTINUATION: Usado para continuar con una secuencia de headers.

PRIORITY: usado para advertir prioridad de un stream.

RST_STREAM: usado para finalizar un stream.

SETTINGS: usado para intercambiar parámetros de configuración.

PUSH_PROMISE: usado para advertir el envío de un recurso.

PING: usado para medir roundtrip time y checkeo.

GOAWAY: Usado para informar al extremo que no cree mas streams.

WINDOW_UPDATE: Usado para la implementación de control de flujo.

HTTP/2 – Múltiples Streams:

HTTP/2 – Prioridades y dependencias:

HTTP/2 – Compresión de Headers:

Basada en diccionario:

HPACK - Header Compression for HTTP/2 - RFC7541

HTTP/2 – Server PUSH:

HTTP/2 – Iniciando HTTP/2 vía https:

Se Intercambia un esquema de oferta/respuesta (Client Hello/Server Hello)

entre el cliente y el servidor durante el Handshake TLS con la extensión ALPN

(Application Layer Protocol Negotiation)

h2c – Iniciando HTTP/2 vía http:

NOTA: SPDY obligaba TLS, tanto Chrome como Firefox solo implementan HTTP/2 con TLS

HTTP/2 - Existe!

Soporte en los clientes:

Chrome,

Firefox

Internet Explorer y Edge

Opera

Servers:

Nginx

Apache (mod_h2)

IIS 2016

Sitios como:

https://www.google.com

https://twitter.com

https://www.facebook.com/

QUIC (Quick UDP Internet Connections)

Mejoras de latencia en el establecimiento de la conexión (0 RTT).

Multiplexado (sin bloqueo head-of-line)

Control flexible de congestión (diferenciación ACK y retransmisión)

Control de flujo a nivel de conexión y de paquetes de datos

Autenticación y encriptación de la cabecera y carga útil de un paquete

Corrección de errores hacia delante.

QUIC:

HTTP/3

"Hypertext Transfer Protocol (HTTP) over QUIC"

HTTP/2 – Referencias:

IETF HTTP Working Group:

https://http2.github.io/

http2 explained:

https://daniel.haxx.se/http2/

High Performance Browser Networking (Cap 9-12):

https://hpbn.co/

QUiC HTTP/3:

https://quicwg.org/base-drafts/draft-ietf-quic-http.html

Recommended