Inleiding HTTP/2

33
HTTP/2 Fedict – Brussel – 1 oktober 2015

Transcript of Inleiding HTTP/2

Page 1: Inleiding HTTP/2

HTTP/2Fedict – Brussel – 1 oktober 2015

Page 2: Inleiding HTTP/2

| p. 2

Introductie

HTTP 1.0 / 1.1

Google SPDY (verouderd)

HTTP 2

Agenda

Page 3: Inleiding HTTP/2

| p. 3

HTTP(S) stack

IPv4 of IPv6

HTTP

SSL of TLS

TCP

HTML JSON ...

Page 4: Inleiding HTTP/2

| p. 4

HTTP request en responseGET /index.php HTTP/1.1Host: www.belgif.beAccept: text/html, application/xhtml+xmlUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1..Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip, deflateCookie: PHPSESSID=bbf5de9mz18a8x66zlm33puh7

HTTP/1.x 200 OKDate: Thu, 17 Sep 2015 03:46:01 GMTServer: ApacheContent-Type: text/html; charset=UTF8Content-Encoding: gzip…<html>

Page 5: Inleiding HTTP/2

HTTP 1.0 en 1.1

HyperText Transfer Protocol

Page 6: Inleiding HTTP/2

| p. 6

Geschiedenis 1991: V0.9 1996: V1.0 (RFC 1945)

1 request / 1 response Elke keer TCP-connectie opzetten / afbreken => “Connection: Keep-Alive” (nog geen deel van spec)

HTTP 1.0

Page 7: Inleiding HTTP/2

| p. 7

Typische PC Pentium 133 MHz, 8 MB RAM, 1 GB HD 28.8 kbps modem

Browsers: Netscape 2.0, IE 2.0 / 3.0 <FRAME>, Java JDK 1.0, Javascript

Kwamen net iets later: CSS 1.0, 802.11 (WiFi)

Intermezzo: 1996

Page 8: Inleiding HTTP/2

| p. 8

Belgium.be in 1996

Page 9: Inleiding HTTP/2

| p. 9

Geschiedenis 1997: RFC 2068 1999: RFC 2616 2014: RFC 7230-7235

Meer request methods OPTIONS, PUT, DELETE, CONNECT, TRACE

HTTP 1.1

Page 10: Inleiding HTTP/2

| p. 10

Persistent connectie / Keep-alive Hergebruik TCP connectie + vermijden TCP slow start

Pipelining Sturen serie requests zonder response af te wachten => nuttig voor webpagina's met veel img, js, css...

Chunked transfer Server kan meteen beginnen sturen => nuttig voor dynamische gegenereerde pagina's Transfer-Encoding ipv Content-Length header

HTTP 1.1: verbetering performantie

Page 11: Inleiding HTTP/2

| p. 11

Meerdere requests, maar 1 response tegelijk Connectie “bezet” tijdens laden grote (multimedia) files

=> Meerdere TCP connecties tegelijk Typisch 4 à 8 per domein Vb: Google Maps, 1 connectie per blok van de kaart Zwaardere belasting servers en NAT

=> Andere oplossingen (server) Samenvoegen meerdere CSS files (of JS) tot 1 file Verdelen content =/= domeinen (domain sharding)

Beperking: 1 response tegelijk

Page 12: Inleiding HTTP/2

| p. 12

Snelheid neemt nog altijd toe maar...

… round-trip time (latency) is onvermijdelijk Signaal kan niet sneller dan lichtsnelheid

Overhead bij starten nieuwe TCP connectie

Overhead sturen bijna identieke HTTP headers AJAX-calls, mobile...

Verminderen round-trips, overhead

Page 13: Inleiding HTTP/2

Google SPDY

Page 14: Inleiding HTTP/2

| p. 14

Ontwikkeld door Google 2009: v1.0 2009-2014: v2, v3.x, v4-alpha 2015-2016: uitfasering naar HTTP/2

Wijzigt HTTP niet, wel manier van verzenden Werkt als “tunnel”

(Bijna) altijd via TLS Om door HTTP-firewalls te raken

Overzicht

Page 15: Inleiding HTTP/2

| p. 15

SPDY stack

TCP / IP

TLS

SPDY

HTTP

Page 16: Inleiding HTTP/2

| p. 16

HTTP 1.1: enkel compressie content

SPDY Oorspronkelijk zlib Momenteel uitgeschakeld (CRIME-attack)

Header compressie

Page 17: Inleiding HTTP/2

HTTP/2

Page 18: Inleiding HTTP/2

| p. 18

Ontwikkeld door IETF 2007: httpbis working group 2012: eerste draft gebaseerd op SPDY 2015: RFC 7540

Overzicht

Page 19: Inleiding HTTP/2

| p. 19

Binaire streams Control / Data frames Compressie Headers

Multiplexing Minder TCP connecties

Request Prioritization

Server-side initiated streams

Verschil met HTTP 1.x

Page 20: Inleiding HTTP/2

| p. 20

TLS niet verplicht In theorie

ALPN ipv NPN

HPACK compressie ipv zlib Minder gevoelig voor aanvallen (zoals CRIME)

Betere multiplexing

Verschil met SPDY

Page 21: Inleiding HTTP/2

| p. 21

Ontwikkeld door Google 2011: Next Protocol Negotiation 2014: Application-Layer Protocol Negotiation (RFC 7301)

Welk protocol gebruikt TLS poort 443 ? Protocol al gekend tijdens TLS-handshake Bespaart roundtrip Laat ook toe om =/= certificaat te kiezen per protocol

TLS extensie NPN / ALPN

Page 22: Inleiding HTTP/2

| p. 22

Control / Data Frames

POST /form1 HTTP/1.1Host: server.comUser-Agent: Mozilla/5.0Content-Length: 100...

FirstName=John&LastName=Doe&...

Control Frame

Data Frame

Version Type

Flags Length

1

(Stream ID) Data

Stream ID

Flags Length

0

Data

Page 23: Inleiding HTTP/2

| p. 23

Index tables

Vervangen veelgebruikte headers door byte Vb: 0x02 = method GET

Bijkomende Huffman codering

Header tables: Hpack compressie

Page 24: Inleiding HTTP/2

| p. 24

Multiplexing

Stream 3Header

Stream 2Data

Stream 1Header

Stream 2Header

Stream 1Header

Stream 3Header

Stream 1Header

Stream 1Data

Page 25: Inleiding HTTP/2

| p. 25

Bijhouden reeds verstuurde header info User-Agent, Accept...

Geen vervanging voor cookies, session id… Compatibel blijven met HTTP 1.1

Kan afgezet worden SETTINGS frame met state size 0

Stateful header tables

Page 26: Inleiding HTTP/2

| p. 26

Stateful header tables (2)

GET /page1 HTTP/1.1Host: server.comAccept: text/htmlUser-Agent: Mozilla/5.0

GET /page2 HTTP/1.1Host: server.comAccept: text/htmlUser-Agent: Mozilla/5.0

Control Frame

:method GET :scheme HTTPS:path /page1host server.comaccept: text/htmluser-agent: Mozilla/5.0

Control Frame 2

:path /page2

Page 27: Inleiding HTTP/2

| p. 27

Geen (vervanging van) Javascript API

Bespaart roundtrip

Server hint X-Subresources header Suggestie van de server

Server push X-Associated-Content header Server stuurt content al direct mee Vb: CSS al meesturen met HTML

Server-initiated streams

Page 28: Inleiding HTTP/2

| p. 28

Browsers Chrome 40, Firefox 36, Safari 9 iOS/OS X, IE 11 Win10

Servers Nginx 1.9.5, Apache 2.4.17, F5 BIG-IP, Win 2016

Sites Google, Twitter, Youtube, MaxCDN

Tools Curl, Wireshark (met NSS key logger)

HTTP/2 ondersteuning

Page 29: Inleiding HTTP/2

| p. 29

Werkelijk sneller ?

Bron: http://commons.wikimedia.org/wiki/File:Speedometer_(kmh).JPG

Page 30: Inleiding HTTP/2

| p. 30

Header compressie maakt wel verschil Vb: compressie cookies

Best TCP_NODELAY gebruiken

Maar domain sharding werkt nu tegen Extra DNS lookup, TCP slow start...

Ja, maar...

Page 31: Inleiding HTTP/2

Vragen ?

Page 32: Inleiding HTTP/2

| p. 32

http://daniel.haxx.se/http2/

https://http2.github.io

https://tools.ietf.org/html/rfc7540

https://insouciant.org/tech/http-slash-2-considerations-and-tradeoffs/

Enkele linken

Page 33: Inleiding HTTP/2

Bedankt !Bart Hanssens / Fedict

WTC III, Simon Bolivarlaan 30

1000 Brussel, België

@BartHanssens

bart.hanssens [at] fedict.be | www.fedict.belgium.be