Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht •...

42
terminal42 web development gmbh eine Bestandsaufnahme HTTP/2 Contao Konferenz 2016

Transcript of Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht •...

Page 1: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

eine Bestandsaufnahme

HTTP/2

Co

nta

o K

on

fere

nz

20

16

Page 2: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Über mich

• Yanick Witschi / terminal42 gmbh

• 27

• Schweizer in München

• Contao Core Entwickler

• @toflar

Page 3: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Was wollen wir heute erreichen?

• Funktionsweise von HTTP verstehen.

• Neuerungen in HTTP/2 verstehen.

• Etwas davon für die tägliche Arbeit mitnehmen.

Page 4: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Disclaimer

Diese Präsentation enthält ziemlich sicher technische Ungenauigkeiten/Unstimmigkeiten, die zu Gunsten der

allgemeinen Verständlichkeit

– selbstverständlich absichtlich –

in Kauf genommen wurden.

Page 5: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Inhalt• Netzwerktechnik: Wo befinden wir uns?

• Das Hypertext Transfer Protocol

• Was macht denn HTTP/1.1 eigentlich falsch?

• Die Neuerungen in HTTP/2 und die Auswirkungen

• Kann ich heute schon davon profitieren?

• Fragen

Page 6: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Netzwerktechnik:Wo befinden wir uns?

Page 7: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Das OSI-ModellSchicht Kopplungselement Beispiele HTTP-Stack

7 Application

Gateway

DNS,FTP,SSH,

SMTP,IMAP

HTTP6 Presentation

5 Session

4 Transport TCP, UDP, TLS TCP

3 Network Router, L3-Switch IPsec, ICMP

IP2 Data Link Switch Ethernet, WLAN,

ARP1 Physical Kabel, Repeater

Page 8: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Das OSI-ModellSchicht HTTP-Stack

7 Application

HTTP6 Presentation

5 Session

4 Transport TCP

3 Network

IP2 Data Link

1 Physical

Page 9: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Das Hypertext Transfer Protocol

Page 10: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

• HTTP/0.9 (1989 - 1991, CERN, Genf), ebenso Geburt von HTML und URL

• HTTP/1.0 (1996, RFC 1945, 60 Seiten)

• HTTP/1.1 (1999, RFC 2616, 176 Seiten)

• SPDY/1.0 (2009)

• SPDY/2.0 (2012)

• HTTP/2 (2015, RFC 7540, 96 Seiten)

• Ergänzende RFCs für Range Requests, Caching etc.

Page 11: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

RFC

Page 12: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Aufbau

GET /de/news.html HTTP/1.1 Host: contao.org Accept: text/html Accept-Language: deClient Server

Request

ResponseHTTP/1.1 200 OK Server: nginx Content-Type: text/html; charset=utf-8 <!DOCTYPE html> <html lang="de"> <head> [...] Message Body

Status Code

Headers

Page 13: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

https://www.wireshark.org

Page 14: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Page 15: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Page 16: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Wir fassen zusammen

• basiert in nahezu allen Fällen auf TCP/IP

• textbasiert

Schicht

7 Application

HTTP6 Presentation

5 Session

4 Transport TCP

3 Network

IP2 Data Link

1 Physical

HTTP/1.1 200 OK Server: nginx Content-Type: text/html; charset=utf-8 <!DOCTYPE html> <html lang="de"> <head> [...]

Page 17: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Was macht denn HTTP/1.1 falsch?

Und was unternehmen wir dagegen?

Page 18: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

1 Request pro TCP Verbindung• Webseiten haben gem.

http://httparchive.org perMitte Mai 2016 im Schnitt109 (!!!) Requests

• contao.org: 56 Requests

• t3n.de: 149 Requests

• facebook.com: 185 Requests

Page 19: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

6

6

6

! TCP-Handshake, Server-Load, Congestion (Stau)

185 / 6 = >30

Page 20: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Fazit für den schlauen Webentwickler

Requests sparen!

Page 21: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

1. Concatenate it all!

• reset.css

• grid.css

• global.css

• fonts.css

• news.css

• internal.css

• styles.css

! Cache und (möglicherweise) unnötige Daten!

Page 22: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

2. Inline it all!

<html> <head> <style> .yellow {background-color: yellow;} .blue {color: blue;} [...] </style> </head> <body> <img src="data:image/png;base64,..."> <script type="text/javascript"> [...] </script> </body> </html>

! Cache und (möglicherweise) unnötige Daten!

Page 23: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

3. Domain Sharding

• files.domain.de

• assets.domain.de

• etc.

! Komplexität

Page 24: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

HTTP/2

Page 25: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Übersicht

• HTTP/2 ist kompatibel mit HTTP 1.1(Syntax bleibt), wird allerdings binärstatt in Textform übertragen

• HTTP/2 Requests sind vollständig "multiplexed" statt in Reihenfolge und blockierend

• HTTP/2 erlaubt das aktive "Pushen" vom Server zum Client

• weitere Verbesserungen wie z.B. Header Compression

GET /de/news.html HTTP/2.0 Host: contao.org Accept: text/html Accept-Language: de

Page 26: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Binär, also alles kaputt jetzt?

GET /de/news.html HTTP/2.0 01110100 01100101 01110010 01101101 01101001 01101110 01100001 01101100 00110100 00110010

Client Server

Request

ResponseHTTP/2.0 200 OK 01110100 01100101 01110010 01101101 01101001 01101110 01100001 01101100 00110100 00110010

Page 27: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Binär, also alles kaputt jetzt?

GET /de/news.html HTTP/1.1 Host: contao.org Accept: text/html Accept-Language: de

Client Server

Request

Response

HTTP/1.1 200 OK Server: nginx Content-Type: text/html; charset=utf-8 <!DOCTYPE html> <html lang="de"> <head> [...]

GET /de/news.html HTTP/1.1 Host: contao.org Accept: text/html Accept-Language: de

HTTP/1.1 200 OK Server: nginx Content-Type: text/html; charset=utf-8 <!DOCTYPE html> <html lang="de"> <head> [...]

01010101010101010101010101010101010101010101

" schneller, kompakter,weniger fehleranfällig

Page 28: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

multi- plexing" schneller,

erlaubt Priorisierung,

nur noch 1 TCP- Verbindung,

Networkcongestion

Page 29: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Server Push

• Ähnlich wie "Inlining", nur separat "cachebar" - z.B. Homepage HTML plus Logo und Scripts.

• HTTP Header: Link: <https://domain.tld/asset.jpg>; rel=prefetch

• <link>-Tag im <head>:<link rel="prefetch" href="https://domain.tld/asset.jpg">

" Performance

dns-prefetch, preconnect, prefetch, prerender

Page 30: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

https://http2.akamai.com/demo

Page 31: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Performance-Optimierung

Zusammenfassung

Page 32: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Beschreibung HTTP/1.1 HTTP/2

DNS-Lookups reduzieren " "

CDN verwenden " "

Redirects reduzieren " "

Dateien komprimieren " "

Caching " "

Unnötige Daten weglassen " "

Domain Sharding " weglassen

Dateien "inlinen" " Server Push

Dateien "concatenaten" " reduzieren

Page 33: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Heisst das, wir können jetzt auf HTTP/2 setzen?

Page 34: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Server-SupportSoftware Support ab Version Support ab

Apache 2.4.17 11.10.2015

Nginx 1.9.5 22.09.2015

Microsoft IIS10

(Windows Server 2016,Windows 10)

29.07.2015bzw. Q3 2016

Page 35: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Wie weiss ich ob mein Hosting-Provider bzw. mein Hosting schon so weit ist?

https://tools.keycdn.com/http2-test

Page 36: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

TLS ist de facto Voraussetzung!

Client-Support

Page 37: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Client-Support

Page 38: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Wir fassen zusammen

um HTTP/2 heute verwenden zu können, braucht ihr:

• einen Server mit HTTP/2 und ALPN (für Chrome 51+)-Support.

• das prüft ihr ganz einfach mit https://tools.keycdn.com/http2-test

• einen Client mit HTTP/2 Support.

• das prüft ihr wie viele andere Browser-Features auf caniuse.com

• ein TLS-Zertifikat

Page 39: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Contao

https://github.com/contao/core-bundle/issues/484

Page 40: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Dieser Vortrag

HPACK

RFCs

Resource Hints ALPN

Page 41: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

Ressourcen• http://designmodo.com/http2/

• https://www.mnot.net/blog/2016/04/22/ideal-http

• https://docs.google.com/presentation/d/1_SMrVmiMxW2X1QZ1EcCnLKSosiD0PppP70Q3bw-l5Lg/present

• https://www.smashingmagazine.com/2016/02/getting-ready-for-http2/

• https://kinsta.com/learn/what-is-http2/

• https://tools.keycdn.com/http2-test

• https://http2.akamai.com/demo

• https://cascadingmedia.com/insites/2015/03/http-2.html

• https://ma.ttias.be/day-google-chrome-disabled-http2-nearly-everyone-may-15th-2016/

• https://www.cyon.ch/blog/HTTP2-Raketenantrieb-fuers-Web

Page 42: Vortrag Konferenz 2016 HTTP2 - contao.ninja · terminal42 web development gmbh Übersicht • HTTP/2 ist kompatibel mit HTTP 1.1 (Syntax bleibt), wird allerdings binär statt in Textform

terminal42 web development gmbh

?

Co

nta

o K

on

fere

nz

20

16