SlideShare a Scribd company logo
1 of 36
Download to read offline
Webservices auf Basis von
HTTP/2 und Servlet 4.0
JAN WEINSCHENKER
16. März 2018 @JANWEINSCHENKER 1
Agenda
16. März 2018 @JANWEINSCHENKER 2
1. HTTP von damals bis heute
2. Die Technik in HTTP
3. Java und Servlet4
4. Fragen
16. März 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.
HTTP von damals bis
heute
DIE VORGESCHICHTE VON HTTP/2 (H2)
16. März 2018 @JANWEINSCHENKER 4
HTTP/1.0 - 1990
Line Mode Browser (LMB) von Nicola Pellow (CERN)
16. März 2018 @JANWEINSCHENKER 5
HTTP/1.0 – 1991: Nexus Browser
Entwickelt von Tim
Berners-Lee
16. März 2018 @JANWEINSCHENKER 6
16. März 2018 @JANWEINSCHENKER 7
java.sun.com - Februar 1998
Quelle: archive.org
www.yahoo.com - April 1999
Quelle: archive.org
HTTP/1.1 – 1999
Das Web heute
16. März 2018 @JANWEINSCHENKER 8
315 Requests
5,79 MB
2,36s
Das Web hat sich verändert
• Mehr und komplexere
Inhalte
• JavaScript, CSS, AJAX,
Audio/Video, ...
• Mobile Endgeräte, also ggf.
unzuverlässige Leitungen
• EDGE, 3G, LTE, WLAN, LAN
• Leistungsfähigere Browser
• Das Web bzw. HTTP ist zur
Grundlage von SOAP- und
RESTful-Webservices
geworden.
16. März 2018 @JANWEINSCHENKER 9
Aber HTTP/1.* stammt immer noch
aus den 90ern!
HTTP/2 – Seit 2015
• Reduziert Protokoll-Overhead und TCP-Sockets
• Connection-Multiplexing
• Reduziert Anzahl der HTTP-Anfragen
• Server-Push
• Reduziert Anzahl der TCP-Roundtrips
• Komprimierung der Protokoll-Header (HPACK)
16. März 2018 @JANWEINSCHENKER 10
Die Technik in HTTP
16. März 2018 @JANWEINSCHENKER 11
HTTP Request Roundtrip
16. März 2018 @JANWEINSCHENKER 12
Client ServerDNS
DNS
TCP
HTTP
GET
SSL
www.google.d
e
172.217.20.19
5 SYN
SYN/AC
K
ACK
GET
1x pro
Host
HTTP/1.1 Request-Pipelining
16. März 2018 @JANWEINSCHENKER 13
Client Server
GET index.html
Abwicklung
mehrerer
GET-Requests
innerhalb
einer TCP-
Verbindung
HTTP/1.1 Workarounds
• Mehrere TCP-Connections parallel öffnen
• Domain Sharding
• TCP-Verbindungen sind relativ “teuer“
• Anzahl an Verbindungen wird durch Clients begrenzt.
16. März 2018 @JANWEINSCHENKER 14
HTTP/1.1 Workarounds - Sharding
16. März 2018 @JANWEINSCHENKER 15
www.site.com https://static1.site.com
https://static2.site.com
style.css
button.css
logo.png
product.png
HTTP/1.1 Workarounds
• Verbindungen reduzieren
• Spriting
• Zusammenfassen von Ressourcen
• CSS und JavaScript
• Inlining mittels Base 64
• Probleme beim Caching
16. März 2018 @JANWEINSCHENKER 16
Sprite mit 9 Bildern
HTTP/2 - Keine Workarounds mehr nötig
• HTTP/2 bietet Multiplexing
• Alle Request-Response-Konversationen laufen simultan über
ein und dieselbe TCP-Verbindung.
16. März 2018 @JANWEINSCHENKER 17
16. März 2018 @JANWEINSCHENKER 18
HTTP/2 - Die Bausteine
TCP-Connection
Message Stream
Message
frame frame frame frame
frame frame frame frame
frame frame frame frame
Message
frame frame frame frame
frame frame frame frame
frame frame frame frame
Message
frame frame frame frame
frame frame frame frame
frame frame frame frame
Message Stream
Message
frame frame frame frame
frame frame frame frame
frame frame frame frame
Message
frame frame frame frame
frame frame frame frame
frame frame frame frame
Message
frame frame frame frame
frame frame frame frame
frame frame frame frame
Message Stream ...
16. März 2018 @JANWEINSCHENKER 19
HTTP/1.1 – Eine Beispiel-Konversation
Client
Server
GET /index.html
STATUS 200
index.html
GET /style.css
STATUS 200
style.css
GET /script.js
STATUS 200
script.js
16. März 2018 @JANWEINSCHENKER 20
HTTP/2 – Ein Beispiel-Stream
Client
Server
Message 1
Message 2
STREAM-ID 41
HEADERS-Frame
GET /index.html
STREAM-ID 41
HEADERS-Frame
STATUS 200
STREAM-ID 41
DATA-Frame
{binary index.html}
+END_STREAM
16. März 2018 @JANWEINSCHENKER 21
HTTP/2 – Ein Beispiel für Server-PUSH
Client
Server
STREAM-ID 41
HEADERS-Frame
GET /index.html
STREAM-ID 41
HEADERS-Frame
STATUS 200
STREAM-ID 41
PUSH_PROMISE-Frame
/style.css
via STREAM 42
STREAM-ID 41
DATA-Frame
{binary index.html}
+END_STREAM
STREAM-ID 42
DATA-Frame
{binary style.css}
+END_STREAM
STREAM-ID 42
HEADERS-Frame
STATUS 200
16. März 2018 @JANWEINSCHENKER 22
HTTP/2 – Noch ein Beispiel für Server-PUSH
Client
Server
STREAM-ID 41
HEADERS-Frame
GET /index.html
+END_HEADERS
+END_STREAM STREAM-ID 41
HEADERS-Frame
STATUS 200
STREAM-ID 41
PUSH_PROMISE-Frame
/style.css
via STREAM 42
STREAM-ID 41
DATA-Frame
{binary index.html}
+END_STREAM
STREAM-ID 42
HEADERS-Frame
STATUS 200
+END_HEADERS
STREAM-ID 42
RST_STREAM-Frame
<Error Code>
Compression in HTTP/1.1
• Keine Header Compression
• Komprimierung von Nutzdaten mittels
GZIP und DEFLATE
16. März 2018 @JANWEINSCHENKER 23
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 (IPv4).
• MSS (Maximum Segment Size)
16. März 2018 @JANWEINSCHENKER 24
ACK
TCP Slow Start
16. März 2018 @JANWEINSCHENKER 25
Browser Server
GET
GET
GET
ACK
ACK
Beispiel: 1 GET-Request mit 1500 Byte an Header-Daten und MSS 500 Byte.
Header Compression – HTTP/2
• Komprimierung der HTTP-Header mittels
HPACK
• Payload-Kompression weiterhin mit GZIP
16. März 2018 @JANWEINSCHENKER 26
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
16. März 2018 @JANWEINSCHENKER 27
HTTP/2 zum Angucken
https://http2.golang.org/gophertiles?latency=200
16. März 2018 @JANWEINSCHENKER 28
Java und Servlet4
16. März 2018 @JANWEINSCHENKER 29
Die Servlet API
16. März 2018 @JANWEINSCHENKER 30
• Die meisten Änderungen sind für Entwickler transparent.
• Multiplexing und HPACK erfolgen automatisch.
• Lediglich Server Push ist mit eigenem
Implementierungsaufwand verbunden.
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 ja ja (mit Embedded Tomcat 9)
Tomcat 9 ja ja
OkHttp 3 Client ja nein
Jetty Server und Client v9.3+ ja nein
Undertow Server 1.4 ja nein
Apache Commons HTTP Client 5 ja nein
16. März 2018 @JANWEINSCHENKER 31
Codebeispiele bei Github
https://github.com/janweinschenker/servlet4-demo
16. März 2018 @JANWEINSCHENKER 32
Fazit
• HTTP/2 setzt sich im Java-Umfeld zu
langsam durch.
• Mittlerweile gibt es Implementierungen in
verbreiteten Frameworks
16. März 2018 @JANWEINSCHENKER 33
Fragen?
???
16. März 2018 @JANWEINSCHENKER 34
Ende
Vielen Dank!
16. März 2018 @JANWEINSCHENKER 35
Icons
Icons von http://hawcons.com
16. März 2018 @JANWEINSCHENKER 36

More Related Content

Similar to Webservices auf Basis von HTTP/2 und Servlet4

Workshop Logfile Analyse mit Splunk
Workshop Logfile Analyse mit SplunkWorkshop Logfile Analyse mit Splunk
Workshop Logfile Analyse mit SplunkHannes Richter
 
Zentrales Logging mit Elasticsearch
Zentrales Logging mit ElasticsearchZentrales Logging mit Elasticsearch
Zentrales Logging mit ElasticsearchSimonSchneider24
 
AS2 in10 Schritten
AS2 in10 SchrittenAS2 in10 Schritten
AS2 in10 Schrittenakueken
 
FMK2018-FileMaker und JSON/REST by Bernhard Schulz schubec.com
FMK2018-FileMaker und JSON/REST by Bernhard Schulz schubec.comFMK2018-FileMaker und JSON/REST by Bernhard Schulz schubec.com
FMK2018-FileMaker und JSON/REST by Bernhard Schulz schubec.comVerein FM Konferenz
 
Icinga 2: Integration von Graphite (Webinar vom 25.09.2014)
Icinga 2: Integration von Graphite (Webinar vom 25.09.2014)Icinga 2: Integration von Graphite (Webinar vom 25.09.2014)
Icinga 2: Integration von Graphite (Webinar vom 25.09.2014)NETWAYS
 
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...Christian Wenz
 
In den richtigen Ländern ranken | Kerstin Reichert | SEOkomm 2016
 In den richtigen Ländern ranken | Kerstin Reichert | SEOkomm 2016 In den richtigen Ländern ranken | Kerstin Reichert | SEOkomm 2016
In den richtigen Ländern ranken | Kerstin Reichert | SEOkomm 2016Kerstin Reichert
 
Programmieren für das Web - Vorlesung 13
Programmieren für das Web - Vorlesung 13Programmieren für das Web - Vorlesung 13
Programmieren für das Web - Vorlesung 13Kay Strobach
 
Giessen r user group treffen 10 05-2011 - foliensatz
Giessen r user group treffen 10 05-2011 - foliensatzGiessen r user group treffen 10 05-2011 - foliensatz
Giessen r user group treffen 10 05-2011 - foliensatzmasem research institute
 
Avoid Network-Issues and Polling
Avoid Network-Issues and PollingAvoid Network-Issues and Polling
Avoid Network-Issues and PollingKai Donato
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesQAware GmbH
 
Einführung XHTML CSS JS // MM 08-11
Einführung XHTML CSS JS // MM 08-11Einführung XHTML CSS JS // MM 08-11
Einführung XHTML CSS JS // MM 08-11Noël Bossart
 
Bidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für WebanwendungenBidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für WebanwendungenMarco Rico Gomez
 
Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.Kai Donato
 
Echtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoEchtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoOliver Lemm
 
REST Problems
REST ProblemsREST Problems
REST Problemspredic8
 
FMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker KrambrichFMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker KrambrichVerein FM Konferenz
 

Similar to Webservices auf Basis von HTTP/2 und Servlet4 (20)

Workshop Logfile Analyse mit Splunk
Workshop Logfile Analyse mit SplunkWorkshop Logfile Analyse mit Splunk
Workshop Logfile Analyse mit Splunk
 
Interaktives Web
Interaktives WebInteraktives Web
Interaktives Web
 
OAuth 2.0
OAuth 2.0OAuth 2.0
OAuth 2.0
 
Zentrales Logging mit Elasticsearch
Zentrales Logging mit ElasticsearchZentrales Logging mit Elasticsearch
Zentrales Logging mit Elasticsearch
 
AS2 in10 Schritten
AS2 in10 SchrittenAS2 in10 Schritten
AS2 in10 Schritten
 
FMK2018-FileMaker und JSON/REST by Bernhard Schulz schubec.com
FMK2018-FileMaker und JSON/REST by Bernhard Schulz schubec.comFMK2018-FileMaker und JSON/REST by Bernhard Schulz schubec.com
FMK2018-FileMaker und JSON/REST by Bernhard Schulz schubec.com
 
Icinga 2: Integration von Graphite (Webinar vom 25.09.2014)
Icinga 2: Integration von Graphite (Webinar vom 25.09.2014)Icinga 2: Integration von Graphite (Webinar vom 25.09.2014)
Icinga 2: Integration von Graphite (Webinar vom 25.09.2014)
 
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
Kommunikations-APIs von JavaScript (International PHP Conference/WebTechCon 2...
 
In den richtigen Ländern ranken | Kerstin Reichert | SEOkomm 2016
 In den richtigen Ländern ranken | Kerstin Reichert | SEOkomm 2016 In den richtigen Ländern ranken | Kerstin Reichert | SEOkomm 2016
In den richtigen Ländern ranken | Kerstin Reichert | SEOkomm 2016
 
Programmieren für das Web - Vorlesung 13
Programmieren für das Web - Vorlesung 13Programmieren für das Web - Vorlesung 13
Programmieren für das Web - Vorlesung 13
 
Giessen r user group treffen 10 05-2011 - foliensatz
Giessen r user group treffen 10 05-2011 - foliensatzGiessen r user group treffen 10 05-2011 - foliensatz
Giessen r user group treffen 10 05-2011 - foliensatz
 
Avoid Network-Issues and Polling
Avoid Network-Issues and PollingAvoid Network-Issues and Polling
Avoid Network-Issues and Polling
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit Microservices
 
Einführung XHTML CSS JS // MM 08-11
Einführung XHTML CSS JS // MM 08-11Einführung XHTML CSS JS // MM 08-11
Einführung XHTML CSS JS // MM 08-11
 
Bidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für WebanwendungenBidirektionale Verbindungen für Webanwendungen
Bidirektionale Verbindungen für Webanwendungen
 
Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.Echtzeitvisualisierung von Twitter und Co.
Echtzeitvisualisierung von Twitter und Co.
 
Echtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & CoEchtzeitvisualisierung von Twitter & Co
Echtzeitvisualisierung von Twitter & Co
 
REST Problems
REST ProblemsREST Problems
REST Problems
 
FMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker KrambrichFMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
FMK2017 - REST mobil- die andere Serververbindung by Volker Krambrich
 
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-iiBit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
Bit sosem 2016-wieners-sitzung-07_rechnerkommunikation-ii
 

Webservices auf Basis von HTTP/2 und Servlet4

  • 1. Webservices auf Basis von HTTP/2 und Servlet 4.0 JAN WEINSCHENKER 16. März 2018 @JANWEINSCHENKER 1
  • 2. Agenda 16. März 2018 @JANWEINSCHENKER 2 1. HTTP von damals bis heute 2. Die Technik in HTTP 3. Java und Servlet4 4. Fragen
  • 3. 16. März 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) 16. März 2018 @JANWEINSCHENKER 4
  • 5. HTTP/1.0 - 1990 Line Mode Browser (LMB) von Nicola Pellow (CERN) 16. März 2018 @JANWEINSCHENKER 5
  • 6. HTTP/1.0 – 1991: Nexus Browser Entwickelt von Tim Berners-Lee 16. März 2018 @JANWEINSCHENKER 6
  • 7. 16. März 2018 @JANWEINSCHENKER 7 java.sun.com - Februar 1998 Quelle: archive.org www.yahoo.com - April 1999 Quelle: archive.org HTTP/1.1 – 1999
  • 8. Das Web heute 16. März 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 • EDGE, 3G, LTE, WLAN, LAN • Leistungsfähigere Browser • Das Web bzw. HTTP ist zur Grundlage von SOAP- und RESTful-Webservices geworden. 16. März 2018 @JANWEINSCHENKER 9 Aber HTTP/1.* stammt immer noch aus den 90ern!
  • 10. HTTP/2 – Seit 2015 • Reduziert Protokoll-Overhead und TCP-Sockets • Connection-Multiplexing • Reduziert Anzahl der HTTP-Anfragen • Server-Push • Reduziert Anzahl der TCP-Roundtrips • Komprimierung der Protokoll-Header (HPACK) 16. März 2018 @JANWEINSCHENKER 10
  • 11. Die Technik in HTTP 16. März 2018 @JANWEINSCHENKER 11
  • 12. HTTP Request Roundtrip 16. März 2018 @JANWEINSCHENKER 12 Client ServerDNS DNS TCP HTTP GET SSL www.google.d e 172.217.20.19 5 SYN SYN/AC K ACK GET 1x pro Host
  • 13. HTTP/1.1 Request-Pipelining 16. März 2018 @JANWEINSCHENKER 13 Client Server GET index.html Abwicklung mehrerer GET-Requests innerhalb einer TCP- Verbindung
  • 14. HTTP/1.1 Workarounds • Mehrere TCP-Connections parallel öffnen • Domain Sharding • TCP-Verbindungen sind relativ “teuer“ • Anzahl an Verbindungen wird durch Clients begrenzt. 16. März 2018 @JANWEINSCHENKER 14
  • 15. HTTP/1.1 Workarounds - Sharding 16. März 2018 @JANWEINSCHENKER 15 www.site.com https://static1.site.com https://static2.site.com style.css button.css logo.png product.png
  • 16. HTTP/1.1 Workarounds • Verbindungen reduzieren • Spriting • Zusammenfassen von Ressourcen • CSS und JavaScript • Inlining mittels Base 64 • Probleme beim Caching 16. März 2018 @JANWEINSCHENKER 16 Sprite mit 9 Bildern
  • 17. HTTP/2 - Keine Workarounds mehr nötig • HTTP/2 bietet Multiplexing • Alle Request-Response-Konversationen laufen simultan über ein und dieselbe TCP-Verbindung. 16. März 2018 @JANWEINSCHENKER 17
  • 18. 16. März 2018 @JANWEINSCHENKER 18 HTTP/2 - Die Bausteine TCP-Connection Message Stream Message frame frame frame frame frame frame frame frame frame frame frame frame Message frame frame frame frame frame frame frame frame frame frame frame frame Message frame frame frame frame frame frame frame frame frame frame frame frame Message Stream Message frame frame frame frame frame frame frame frame frame frame frame frame Message frame frame frame frame frame frame frame frame frame frame frame frame Message frame frame frame frame frame frame frame frame frame frame frame frame Message Stream ...
  • 19. 16. März 2018 @JANWEINSCHENKER 19 HTTP/1.1 – Eine Beispiel-Konversation Client Server GET /index.html STATUS 200 index.html GET /style.css STATUS 200 style.css GET /script.js STATUS 200 script.js
  • 20. 16. März 2018 @JANWEINSCHENKER 20 HTTP/2 – Ein Beispiel-Stream Client Server Message 1 Message 2 STREAM-ID 41 HEADERS-Frame GET /index.html STREAM-ID 41 HEADERS-Frame STATUS 200 STREAM-ID 41 DATA-Frame {binary index.html} +END_STREAM
  • 21. 16. März 2018 @JANWEINSCHENKER 21 HTTP/2 – Ein Beispiel für Server-PUSH Client Server STREAM-ID 41 HEADERS-Frame GET /index.html STREAM-ID 41 HEADERS-Frame STATUS 200 STREAM-ID 41 PUSH_PROMISE-Frame /style.css via STREAM 42 STREAM-ID 41 DATA-Frame {binary index.html} +END_STREAM STREAM-ID 42 DATA-Frame {binary style.css} +END_STREAM STREAM-ID 42 HEADERS-Frame STATUS 200
  • 22. 16. März 2018 @JANWEINSCHENKER 22 HTTP/2 – Noch ein Beispiel für Server-PUSH Client Server STREAM-ID 41 HEADERS-Frame GET /index.html +END_HEADERS +END_STREAM STREAM-ID 41 HEADERS-Frame STATUS 200 STREAM-ID 41 PUSH_PROMISE-Frame /style.css via STREAM 42 STREAM-ID 41 DATA-Frame {binary index.html} +END_STREAM STREAM-ID 42 HEADERS-Frame STATUS 200 +END_HEADERS STREAM-ID 42 RST_STREAM-Frame <Error Code>
  • 23. Compression in HTTP/1.1 • Keine Header Compression • Komprimierung von Nutzdaten mittels GZIP und DEFLATE 16. März 2018 @JANWEINSCHENKER 23
  • 24. 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 (IPv4). • MSS (Maximum Segment Size) 16. März 2018 @JANWEINSCHENKER 24
  • 25. ACK TCP Slow Start 16. März 2018 @JANWEINSCHENKER 25 Browser Server GET GET GET ACK ACK Beispiel: 1 GET-Request mit 1500 Byte an Header-Daten und MSS 500 Byte.
  • 26. Header Compression – HTTP/2 • Komprimierung der HTTP-Header mittels HPACK • Payload-Kompression weiterhin mit GZIP 16. März 2018 @JANWEINSCHENKER 26
  • 27. 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 16. März 2018 @JANWEINSCHENKER 27
  • 29. Java und Servlet4 16. März 2018 @JANWEINSCHENKER 29
  • 30. Die Servlet API 16. März 2018 @JANWEINSCHENKER 30 • Die meisten Änderungen sind für Entwickler transparent. • Multiplexing und HPACK erfolgen automatisch. • Lediglich Server Push ist mit eigenem Implementierungsaufwand verbunden.
  • 31. 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 ja ja (mit Embedded Tomcat 9) Tomcat 9 ja ja OkHttp 3 Client ja nein Jetty Server und Client v9.3+ ja nein Undertow Server 1.4 ja nein Apache Commons HTTP Client 5 ja nein 16. März 2018 @JANWEINSCHENKER 31
  • 33. Fazit • HTTP/2 setzt sich im Java-Umfeld zu langsam durch. • Mittlerweile gibt es Implementierungen in verbreiteten Frameworks 16. März 2018 @JANWEINSCHENKER 33
  • 34. Fragen? ??? 16. März 2018 @JANWEINSCHENKER 34
  • 35. Ende Vielen Dank! 16. März 2018 @JANWEINSCHENKER 35
  • 36. Icons Icons von http://hawcons.com 16. März 2018 @JANWEINSCHENKER 36

Editor's Notes

  1. https://http2.github.io/http2-spec/
  2. https://http2.github.io/http2-spec/
  3. https://http2.github.io/http2-spec/