Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
HTTP/2
Ing. Agustín Eijo
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