SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
HTTP/2
Fedict – Brussel – 1 oktober 2015
| p. 2
 Introductie
 HTTP 1.0 / 1.1
 Google SPDY (verouderd)
 HTTP 2
Agenda
| p. 3
HTTP(S) stack
IPv4 of IPv6
HTTP
SSL of TLS
TCP
HTML JSON ...
| p. 4
HTTP request en response
GET /index.php HTTP/1.1
Host: www.belgif.be
Accept: text/html, application/xhtml+xml
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1..
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: PHPSESSID=bbf5de9mz18a8x66zlm33puh7
HTTP/1.x 200 OK
Date: Thu, 17 Sep 2015 03:46:01 GMT
Server: Apache
Content-Type: text/html; charset=UTF8
Content-Encoding: gzip
…
<html>
HTTP 1.0 en 1.1
HyperText Transfer Protocol
| 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
| 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
| p. 8
Belgium.be in 1996
| p. 9
 Geschiedenis
 1997: RFC 2068
 1999: RFC 2616
 2014: RFC 7230-7235
 Meer request methods
 OPTIONS, PUT, DELETE, CONNECT, TRACE
HTTP 1.1
| 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
| 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
| 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
Google SPDY
| 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
| p. 15
SPDY stack
TCP / IP
TLS
SPDY
HTTP
| p. 16
 HTTP 1.1: enkel compressie content
 SPDY
 Oorspronkelijk zlib
 Momenteel uitgeschakeld (CRIME-attack)
Header compressie
HTTP/2
| p. 18
 Ontwikkeld door IETF
 2007: httpbis working group
 2012: eerste draft gebaseerd op SPDY
 2015: RFC 7540
Overzicht
| p. 19
 Binaire streams
 Control / Data frames
 Compressie Headers
 Multiplexing
 Minder TCP connecties
 Request Prioritization
 Server-side initiated streams
Verschil met HTTP 1.x
| 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
| 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
| p. 22
Control / Data Frames
POST /form1 HTTP/1.1
Host: server.com
User-Agent: Mozilla/5.0
Content-Length: 100
...
FirstName=John&
LastName=Doe&
...
Control Frame
Data Frame
Version Type
Flags Length
1
(Stream ID) Data
Stream ID
Flags Length
0
Data
| p. 23
 Index tables
 Vervangen veelgebruikte headers door byte
 Vb: 0x02 = method GET
 Bijkomende Huffman codering
Header tables: Hpack compressie
| p. 24
Multiplexing
Stream 3
Header
Stream 2
Data
Stream 1
Header
Stream 2
Header
Stream 1
Header
Stream 3
Header
Stream 1
Header
Stream 1
Data
| 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
| p. 26
Stateful header tables (2)
GET /page1 HTTP/1.1
Host: server.com
Accept: text/html
User-Agent: Mozilla/5.0
GET /page2 HTTP/1.1
Host: server.com
Accept: text/html
User-Agent: Mozilla/5.0
Control Frame
:method GET
:scheme HTTPS
:path /page1
host server.com
accept: text/html
user-agent: Mozilla/5.0
Control Frame 2
:path /page2
| 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
| 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
| p. 29
Werkelijk sneller ?
Bron: http://commons.wikimedia.org/wiki/File:Speedometer_(kmh).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...
Vragen ?
| p. 32
 http://daniel.haxx.se/http2/
 https://http2.github.io
 https://tools.ietf.org/html/rfc7540
 https://insouciant.org/tech/http-slash-2-consid
erations-and-tradeoffs/
Enkele linken
Bedankt !
Bart Hanssens / Fedict
WTC III, Simon Bolivarlaan 30
1000 Brussel, België
@BartHanssens
bart.hanssens [at] fedict.be | www.fedict.belgium.be

Contenu connexe

Plus de Bart Hanssens

OpenFed, a Drupal distribution
OpenFed, a Drupal distributionOpenFed, a Drupal distribution
OpenFed, a Drupal distributionBart Hanssens
 
Open Summer of Code in Belgium
Open Summer of Code in BelgiumOpen Summer of Code in Belgium
Open Summer of Code in BelgiumBart Hanssens
 
Open Belgium 2022: Prepare To Code
Open Belgium 2022: Prepare To CodeOpen Belgium 2022: Prepare To Code
Open Belgium 2022: Prepare To CodeBart Hanssens
 
Werkgroep metadata: INSPIRE - DCAT-AP mapping
Werkgroep metadata: INSPIRE - DCAT-AP mappingWerkgroep metadata: INSPIRE - DCAT-AP mapping
Werkgroep metadata: INSPIRE - DCAT-AP mappingBart Hanssens
 
Quarkus, Jib én OpenJ9
Quarkus, Jib én OpenJ9Quarkus, Jib én OpenJ9
Quarkus, Jib én OpenJ9Bart Hanssens
 
Open Data at the Federal Level 2021
Open Data at the Federal Level 2021Open Data at the Federal Level 2021
Open Data at the Federal Level 2021Bart Hanssens
 
Open Data workshop Agoria ICT
Open Data workshop Agoria ICTOpen Data workshop Agoria ICT
Open Data workshop Agoria ICTBart Hanssens
 
Atelier Open Data / Agoria ICT
Atelier Open Data / Agoria ICTAtelier Open Data / Agoria ICT
Atelier Open Data / Agoria ICTBart Hanssens
 
Open Source and Open Data
Open Source and Open DataOpen Source and Open Data
Open Source and Open DataBart Hanssens
 
Open Community Projects
Open Community ProjectsOpen Community Projects
Open Community ProjectsBart Hanssens
 
From webform to API using microframeworks
From webform to API using microframeworksFrom webform to API using microframeworks
From webform to API using microframeworksBart Hanssens
 
Linked Data: Introductie
Linked Data: IntroductieLinked Data: Introductie
Linked Data: IntroductieBart Hanssens
 
Open data, what's cooking at the federal level 2020
Open data, what's cooking at the federal level 2020Open data, what's cooking at the federal level 2020
Open data, what's cooking at the federal level 2020Bart Hanssens
 
BOSA DG DT: opendata et intégrateur de services
BOSA DG DT: opendata et intégrateur de servicesBOSA DG DT: opendata et intégrateur de services
BOSA DG DT: opendata et intégrateur de servicesBart Hanssens
 
Local and Regional digital transformation in Belgium
Local and Regional digital transformation in BelgiumLocal and Regional digital transformation in Belgium
Local and Regional digital transformation in BelgiumBart Hanssens
 
Voordeel halen uit zoekmachines en semantic web
Voordeel halen uit zoekmachines en semantic webVoordeel halen uit zoekmachines en semantic web
Voordeel halen uit zoekmachines en semantic webBart Hanssens
 

Plus de Bart Hanssens (20)

OpenFed, a Drupal distribution
OpenFed, a Drupal distributionOpenFed, a Drupal distribution
OpenFed, a Drupal distribution
 
Open Summer of Code in Belgium
Open Summer of Code in BelgiumOpen Summer of Code in Belgium
Open Summer of Code in Belgium
 
Open Belgium 2022: Prepare To Code
Open Belgium 2022: Prepare To CodeOpen Belgium 2022: Prepare To Code
Open Belgium 2022: Prepare To Code
 
Werkgroep metadata: INSPIRE - DCAT-AP mapping
Werkgroep metadata: INSPIRE - DCAT-AP mappingWerkgroep metadata: INSPIRE - DCAT-AP mapping
Werkgroep metadata: INSPIRE - DCAT-AP mapping
 
Overzicht DCAT-AP
Overzicht DCAT-APOverzicht DCAT-AP
Overzicht DCAT-AP
 
Quarkus, Jib én OpenJ9
Quarkus, Jib én OpenJ9Quarkus, Jib én OpenJ9
Quarkus, Jib én OpenJ9
 
Open Data at the Federal Level 2021
Open Data at the Federal Level 2021Open Data at the Federal Level 2021
Open Data at the Federal Level 2021
 
Open Data workshop Agoria ICT
Open Data workshop Agoria ICTOpen Data workshop Agoria ICT
Open Data workshop Agoria ICT
 
Atelier Open Data / Agoria ICT
Atelier Open Data / Agoria ICTAtelier Open Data / Agoria ICT
Atelier Open Data / Agoria ICT
 
Open Source and Open Data
Open Source and Open DataOpen Source and Open Data
Open Source and Open Data
 
Données ouvertes
Données ouvertesDonnées ouvertes
Données ouvertes
 
Open Data
Open DataOpen Data
Open Data
 
Open Community Projects
Open Community ProjectsOpen Community Projects
Open Community Projects
 
From webform to API using microframeworks
From webform to API using microframeworksFrom webform to API using microframeworks
From webform to API using microframeworks
 
Linked Data: Introductie
Linked Data: IntroductieLinked Data: Introductie
Linked Data: Introductie
 
JavaVMs en GraalVM
JavaVMs en GraalVMJavaVMs en GraalVM
JavaVMs en GraalVM
 
Open data, what's cooking at the federal level 2020
Open data, what's cooking at the federal level 2020Open data, what's cooking at the federal level 2020
Open data, what's cooking at the federal level 2020
 
BOSA DG DT: opendata et intégrateur de services
BOSA DG DT: opendata et intégrateur de servicesBOSA DG DT: opendata et intégrateur de services
BOSA DG DT: opendata et intégrateur de services
 
Local and Regional digital transformation in Belgium
Local and Regional digital transformation in BelgiumLocal and Regional digital transformation in Belgium
Local and Regional digital transformation in Belgium
 
Voordeel halen uit zoekmachines en semantic web
Voordeel halen uit zoekmachines en semantic webVoordeel halen uit zoekmachines en semantic web
Voordeel halen uit zoekmachines en semantic web
 

Inleiding HTTP/2

  • 1. HTTP/2 Fedict – Brussel – 1 oktober 2015
  • 2. | p. 2  Introductie  HTTP 1.0 / 1.1  Google SPDY (verouderd)  HTTP 2 Agenda
  • 3. | p. 3 HTTP(S) stack IPv4 of IPv6 HTTP SSL of TLS TCP HTML JSON ...
  • 4. | p. 4 HTTP request en response GET /index.php HTTP/1.1 Host: www.belgif.be Accept: text/html, application/xhtml+xml User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1.. Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate Cookie: PHPSESSID=bbf5de9mz18a8x66zlm33puh7 HTTP/1.x 200 OK Date: Thu, 17 Sep 2015 03:46:01 GMT Server: Apache Content-Type: text/html; charset=UTF8 Content-Encoding: gzip … <html>
  • 5. HTTP 1.0 en 1.1 HyperText Transfer Protocol
  • 6. | 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
  • 7. | 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
  • 9. | p. 9  Geschiedenis  1997: RFC 2068  1999: RFC 2616  2014: RFC 7230-7235  Meer request methods  OPTIONS, PUT, DELETE, CONNECT, TRACE HTTP 1.1
  • 10. | 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
  • 11. | 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
  • 12. | 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
  • 14. | 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
  • 15. | p. 15 SPDY stack TCP / IP TLS SPDY HTTP
  • 16. | p. 16  HTTP 1.1: enkel compressie content  SPDY  Oorspronkelijk zlib  Momenteel uitgeschakeld (CRIME-attack) Header compressie
  • 18. | p. 18  Ontwikkeld door IETF  2007: httpbis working group  2012: eerste draft gebaseerd op SPDY  2015: RFC 7540 Overzicht
  • 19. | p. 19  Binaire streams  Control / Data frames  Compressie Headers  Multiplexing  Minder TCP connecties  Request Prioritization  Server-side initiated streams Verschil met HTTP 1.x
  • 20. | 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
  • 21. | 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
  • 22. | p. 22 Control / Data Frames POST /form1 HTTP/1.1 Host: server.com User-Agent: Mozilla/5.0 Content-Length: 100 ... FirstName=John& LastName=Doe& ... Control Frame Data Frame Version Type Flags Length 1 (Stream ID) Data Stream ID Flags Length 0 Data
  • 23. | p. 23  Index tables  Vervangen veelgebruikte headers door byte  Vb: 0x02 = method GET  Bijkomende Huffman codering Header tables: Hpack compressie
  • 24. | p. 24 Multiplexing Stream 3 Header Stream 2 Data Stream 1 Header Stream 2 Header Stream 1 Header Stream 3 Header Stream 1 Header Stream 1 Data
  • 25. | 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
  • 26. | p. 26 Stateful header tables (2) GET /page1 HTTP/1.1 Host: server.com Accept: text/html User-Agent: Mozilla/5.0 GET /page2 HTTP/1.1 Host: server.com Accept: text/html User-Agent: Mozilla/5.0 Control Frame :method GET :scheme HTTPS :path /page1 host server.com accept: text/html user-agent: Mozilla/5.0 Control Frame 2 :path /page2
  • 27. | 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
  • 28. | 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
  • 29. | p. 29 Werkelijk sneller ? Bron: http://commons.wikimedia.org/wiki/File:Speedometer_(kmh).JPG
  • 30. | 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...
  • 32. | p. 32  http://daniel.haxx.se/http2/  https://http2.github.io  https://tools.ietf.org/html/rfc7540  https://insouciant.org/tech/http-slash-2-consid erations-and-tradeoffs/ Enkele linken
  • 33. Bedankt ! Bart Hanssens / Fedict WTC III, Simon Bolivarlaan 30 1000 Brussel, België @BartHanssens bart.hanssens [at] fedict.be | www.fedict.belgium.be