23
HTTP/2 Ing. Agustín Eijo <[email protected]> Hypertext Transfer Protocol version 2 RFC7540 HPACK - Header Compression for HTTP/2 RFC7541

| UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

HTTP/2

Ing. Agustín Eijo

<[email protected]>

Hypertext Transfer Protocol version 2 RFC7540

HPACK - Header Compression for HTTP/2 RFC7541

Page 2: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

HTTP – Historia:

Page 3: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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>

Page 4: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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)

Page 5: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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:

Page 6: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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:

Page 7: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

HTTP/1.1 – Técnicas, estrategias y

trampas:

HTTP Pipelining

Page 8: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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.

Page 9: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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.

Page 10: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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.

Page 11: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

HTTP/2 – Frames:

Page 12: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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.

Page 13: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

HTTP/2 – Múltiples Streams:

Page 14: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

HTTP/2 – Prioridades y dependencias:

Page 15: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

HTTP/2 – Compresión de Headers:

Basada en diccionario:

HPACK - Header Compression for HTTP/2 - RFC7541

Page 16: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

HTTP/2 – Server PUSH:

Page 17: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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)

Page 18: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

h2c – Iniciando HTTP/2 vía http:

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

Page 19: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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/

Page 20: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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.

Page 21: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

QUIC:

Page 22: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

HTTP/3

"Hypertext Transfer Protocol (HTTP) over QUIC"

Page 23: | UTN - Facultad Regional La Plata · HTTP/2 –Tipo de Frames DATA: usado para transportar el contenido del body. HEADERS: usado para intercambiar los header en un stream. CONTINUATION:

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