inleiding http/2
TRANSCRIPT
![Page 1: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/1.jpg)
HTTP/2Fedict – Brussel – 1 oktober 2015
![Page 2: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/2.jpg)
| p. 2
Introductie
HTTP 1.0 / 1.1
Google SPDY (verouderd)
HTTP 2
Agenda
![Page 3: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/3.jpg)
| p. 3
HTTP(S) stack
IPv4 of IPv6
HTTP
SSL of TLS
TCP
HTML JSON ...
![Page 4: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/4.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/5.jpg)
HTTP 1.0 en 1.1
HyperText Transfer Protocol
![Page 6: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/6.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/7.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/8.jpg)
| p. 8
Belgium.be in 1996
![Page 9: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/9.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/10.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/11.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/12.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/13.jpg)
Google SPDY
![Page 14: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/14.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/15.jpg)
| p. 15
SPDY stack
TCP / IP
TLS
SPDY
HTTP
![Page 16: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/16.jpg)
| p. 16
HTTP 1.1: enkel compressie content
SPDY Oorspronkelijk zlib Momenteel uitgeschakeld (CRIME-attack)
Header compressie
![Page 17: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/17.jpg)
HTTP/2
![Page 18: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/18.jpg)
| p. 18
Ontwikkeld door IETF 2007: httpbis working group 2012: eerste draft gebaseerd op SPDY 2015: RFC 7540
Overzicht
![Page 19: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/19.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/20.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/21.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/22.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/23.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/24.jpg)
| p. 24
Multiplexing
Stream 3Header
Stream 2Data
Stream 1Header
Stream 2Header
Stream 1Header
Stream 3Header
Stream 1Header
Stream 1Data
![Page 25: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/25.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/26.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/27.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/28.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/29.jpg)
| p. 29
Werkelijk sneller ?
Bron: http://commons.wikimedia.org/wiki/File:Speedometer_(kmh).JPG
![Page 30: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/30.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/31.jpg)
Vragen ?
![Page 32: Inleiding HTTP/2](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/32.jpg)
| 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](https://reader036.vdocuments.site/reader036/viewer/2022062401/5875d9bf1a28ab8f438b719b/html5/thumbnails/33.jpg)
Bedankt !Bart Hanssens / Fedict
WTC III, Simon Bolivarlaan 30
1000 Brussel, België
@BartHanssens
bart.hanssens [at] fedict.be | www.fedict.belgium.be