Die neue Version 2 des HTTP-Protokolls macht das Netz schneller. Dazu nutzt es viele ausgefeilte technische Raffinessen: Request-Multiplexing, komprimierte Protokoll-Metadaten und Server-Push. All dies macht das Surfen sehr viel angenehmer und sorgt für eine bessere User-Experience.
HTTP/2 zielt darauf ab, die Netzbandbreite besser auszunutzen. Profitieren auch SOAP- und RESTful-Webservices vom neuen HTTP? HTTP/2 bringt Mehraufwand für die Entwickler. Lohnt sich das am Ende? Meist schon, es gibt aber auch Aspekte, die einen echt Nerven kosten.
HTTP/2 – Ist das auch gut für java-basierte Webservices?
1. HTTP/2 – Ist das auch gut
für java-basierte
Webservices?
JAN WEINSCHENKER
20. Februar 2018 @JANWEINSCHENKER 1
2. Agenda
20. Februar 2018 @JANWEINSCHENKER 2
1. HTTP von damals bis heute
2. Die Technik in HTTP
3. Java und Servlet4
4. Fragen
3. 20. Februar 2018 @JANWEINSCHENKER 3
PROFESSIONALS
INDIVIDUALS
N3RDS
Die Holisticon AG ist eine Management- und IT-
Beratung aus Hamburg.
Wir entwickeln beste Individualsoftware,
Webplattformen und Apps.
Geschäftsprozesse durchdringen wir und
automatisieren sie.
Große Datenmengen machen wir mit Smart-Data-
Ansätzen beherrschbar.
4. HTTP von damals bis
heute
DIE VORGESCHICHTE VON HTTP/2 (H2)
20. Februar 2018 @JANWEINSCHENKER 4
5. HTTP/1.0 - 1990
Line Mode Browser (LMB) von Nicola Pellow (CERN)
20. Februar 2018 @JANWEINSCHENKER 5
6. HTTP/1.0 – 1991: Nexus Browser
Entwickelt von Tim
Berners-Lee
20. Februar 2018 @JANWEINSCHENKER 6
7. 20. Februar 2018 @JANWEINSCHENKER 7
www.muenchen.de - April 1999
Quelle: archive.org
www.yahoo.com - April 1999
Quelle: archive.org
HTTP/1.1 – 1999
8. Das Web heute
20. Februar 2018 @JANWEINSCHENKER 8
315 Requests
5,79 MB
2,36s
9. Das Web hat sich verändert
• Mehr und komplexere
Inhalte
• JavaScript, CSS, AJAX,
Audio/Video, ...
• Mobile Endgeräte, also ggf.
unzuverlässige Leitungen
• „Dickere“ Leitungen
• Leistungsfähigere Browser
• Das Web bzw. HTTP ist zur
Grundlage von SOAP- und
RESTful-Webservices
geworden.
20. Februar 2018 @JANWEINSCHENKER 9
Aber HTTP/1.* stammt immer noch
aus den 90ern!
10. HTTP/2 – Seit 2015
• Connection-Multiplexing
• Reduziert Protokoll-Overhead und TCP-Sockets
• Server-Push
• Reduziert Anzahl der HTTP-Anfragen
• Komprimierung der Protokoll-Header (HPACK)
• Reduziert Anzahl der TCP-Roundtrips
20. Februar 2018 @JANWEINSCHENKER 10
11. Die Technik in HTTP
20. Februar 2018 @JANWEINSCHENKER 11
12. HTTP Request Roundtrip
20. Februar 2018 @JANWEINSCHENKER 12
Client ServerDNS
DNS
TCP
HTTP
GET
SSL
www.google.de
172.217.20.195
SYN
SYN/ACK
ACK
GET
1x pro
Host
13. HTTP/1.1 Request-Pipelining
20. Februar 2018 @JANWEINSCHENKER 13
Client Server
GET index.html
Abwicklung
mehrerer
GET-Requests
innerhalb
einer TCP-
Verbindung
14. HTTP/1.1 – Head-Of-Line-Blocking
Bei HTTP/1.1 verarbeitet der Client die Antworten des Servers nur
in der Reihenfolge, in der er die zugehörigen Anfragen versendet
hat.
20. Februar 2018 @JANWEINSCHENKER 14
15. HTTP/1.1 Workarounds
• Mehrere TCP-Connections parallel öffnen
• Domain Sharding
• TCP-Verbindungen sind relativ “teuer“
• Anzahl an Verbindungen wird durch Clients begrenzt.
20. Februar 2018 @JANWEINSCHENKER 15
17. HTTP/1.1 Workarounds
• Verbindungen reduzieren
• Spriting
• Zusammenfassen von Ressourcen
• CSS und JavaScript
• Inlining mittels Base 64
• Probleme beim Caching
20. Februar 2018 @JANWEINSCHENKER 17
18. HTTP/2 - Keine Workarounds mehr nötig
• HTTP/2 bietet Multiplexing
• Alle Request-Response-Konversationen laufen simultan über
ein und dieselbe TCP-Verbindung.
20. Februar 2018 @JANWEINSCHENKER 18
19. HTTP/2 Push und Multiplexing
20. Februar 2018 @JANWEINSCHENKER 19
Client Server
HTTP
GET
GET index.html
index.html favicon.ico
script.js
Style.css
via Server-PUSH
20. HTTP/2 - Begrifflichkeiten
HTTP/2 HTTP/1.1
Connection Ein TCP Socket
Stream Ein Austausch von Request- und Response-Messages zwischen Client und
Server
Message Ein Request bzw. eine Response
Frame Kleinste Einheit zur Kommunikation über die Connection. Eine Message
besteht aus einem oder mehreren Frames.
20. Februar 2018 @JANWEINSCHENKER 20
27. Header-Daten im Browser
1 Kilobyte an Cookie-Daten pro HTTP-Request
• Problem beim initialen Verbindungsaufbau:
• TCP definiert eine Maximalgröße für die ersten TCP Pakete:
532 bytes.
• MSS (Maximum Segment Size)
20. Februar 2018 @JANWEINSCHENKER 27
28. ACK
TCP Slow Start
20. Februar 2018 @JANWEINSCHENKER 28
Browser Server
GET
GET
GET
ACK
ACK
Beispiel: 1 GET-Request mit 1500 Byte an Header-Daten und MSS 500 Byte.
29. Header Compression – HTTP/2
• Komprimierung der HTTP-Header mittels
HPACK
• Payload-Kompression weiterhin mit GZIP
20. Februar 2018 @JANWEINSCHENKER 29
30. Header Compression mit HPACK
Dreistufige Komprimierung von HTTP Headern.
1. Vordefiniertes Kompressionswörterbuch für 61 sehr gebräuchliche Header. Z.B.:
◦ 2 = :method GET
◦ 3 = :method POST
◦ 8 = :status 200
◦ 16 = accept-encoding gzip, deflate
2. Dynamisches Kompressionswörterbuch
◦ Wird zum Zeitpunkt der Verbindungsaufnahme ausgehandelt
3. Statische Huffman-Kodierung
20. Februar 2018 @JANWEINSCHENKER 30
33. Die Servlet API
20. Februar 2018 @JANWEINSCHENKER 33
• Die meisten Änderungen sind für Entwickler transparent.
• Multiplexing und HPACK erfolgen automatisch.
• Lediglich Server Push ist mit eigenem
Implementierungsaufwand verbunden.
34. Java: HTTP/2 Verfügbarkeit
Name HTTP/2 Servlet 4
JBOSS EAP 7.1 ja nein
Wildfly 9+ ja nein
Glassfish 5 ja ja
Spring Boot 2 (RC1) ja ja (mit Embedded Tomcat 9)
Tomcat 9 ja ja
OkHttp 3 Client ja nein
Jetty Serve und Client v9.3+ ja nein
Undertow Server 1.4 ja nein
Apache Commons HTTP Client ja nein
20. Februar 2018 @JANWEINSCHENKER 34