http/2 comes to java
TRANSCRIPT
HTTP/2 comes to Java!
David Delabassee @delabassee Oracle
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
1
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Safe Harbor Statement
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 3
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Agenda
Why HTTP/2?
HTTP/2
HTTP/2 and Java EE
HTTP/2 and Java SE
Summary
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Agenda
Why HTTP/2?
HTTP/2
HTTP/2 and Java SE
HTTP/2 and Java EE
Summary
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 6 @delabassee
Data Never Sleeps 2.0
https://www.domo.com/learn/data-‐never-‐sleeps-‐2
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 7 @delabassee
HTTP 1.x
1991 1996 1999 2009 2015
HTTP/0.9 HTTP/1.0
HTTP/1.1 SPDY
HTTP/2.0
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 8 @delabassee
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 9 @delabassee
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 10 @delabassee
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 11 @delabassee
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 12 @delabassee
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 13 @delabassee
Today
index.html
style1.css
style2.css. . .
script1.js
script9.js
pic1.jpg
pic8.jpg
.
.
.
photo1.png
photo2.png
.
.
.
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 14 @delabassee
google.fr (1st) • 3 HTTP Requests • 21.355 bytes
- 1 HTML
- 1 image
- 1 .js
Top .FR examples
lefigaro.fr (15th) • 140 HTTP Requests • 2.736.562 bytes
- 1 HTML
- 130 images
- 6 .js - 2 .css
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 15 @delabassee
• If a page takes longer than 4 sec to load, 1/4 people abandons that page (1) • 57% of consumers will abandon a page that takes longer than 3 sec to load (2)
• Page load slowdown of 1 sec could cost Amazon $1.6 billion in sales a year (1)
• Slowing search results by 0.4 sec, Google could lose 8 million searches per day (1)
Latency Vs. Conversion RateTime is Money!
(1) http://www.fastcompany.com/1825005/how-‐one-‐second-‐could-‐cost-‐amazon-‐16-‐billion-‐sales (2) RadView Spring 2015 State of the Union: Ecommerce Page Speed & Web Performance
@delabasseeCopyright © 2015, Oracle and/or its affiliates. All rights reserved.
HTTP 1.1Head-‐of-‐Line blocking
16
Client Server
index.htmlindex.html
style1.css script.js
...style1.css script.js
...
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 17 @delabassee
HTTP 1.1
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 18 @delabassee
File Concatenation and Image Sprites
• Modern web page consists of +90 resources fetched from 15 distinct hosts (http://httparchive.org) • TCP Efficiency Improves with Larger Files • Shoving more than one logical file into one physical file
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 19 @delabassee
File Concatenation and Image Sprites
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 20 @delabassee
HTTP 1.1Workaround -‐ Domain Sharding
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 21 @delabassee
Asset inlining
… <img src="data:image/gif;base64,R0lGODlhEAAOexs3eeALMAAOazToeHh0tLS/7LZv0jvb29tf3Ubge8WSLrhf3kdbW1mxsjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfGfHyt56HGfGH56ge8WSLf6GGHhfkjfhhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3pBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3vvhdsbxusbasbPmfyH5BAAAjAAAALAAfhGHhcjAAAAQAA4lsjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3GfHyt56HGfGH56ge8WsjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfGfHyt56HGfGH56gebxus38G8WSLf6GGHvvhdsbxusbaSLf6GGHvvhdsbxusbaOiQA4lsjkhfkjf4lsjkhfkjf4lsjbxus38GkhfkjfhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3DcPjjBceXsplojj…” /> …
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 22 @delabassee
• HTTP uses TCP poorly - HTTP: short and bursty flows Vs. TCP: optimized for long-‐lived flows
• Solutions - Sprites - Domain sharding - Assets Inlining - File concatenations - …
HTTP/1.1 circa 1999Problems Vs Solutions
1991 1996 1999 2009 2015
HTTP/0.9 HTTP/1.0
HTTP/1.1 SPDY
HTTP/2.0
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Agenda
Why HTTP/2?
HTTP/2
HTTP/2 and Java SE
HTTP/2 and Java EE
Summary
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
HTTP/2
• Jan 2015 • Feb 2015 • May 2015
24
Enabled by default in FireFox (35) and Chrome (40) IESG approved HTTP/2 HTTP/2 in 10% of all HTTP responses (FireFox) HTTP/2 used in 18% of global traffic (Google) RFC 7540 “Hypertext Transfer Protocol Version 2” RFC 7541 “HPACK: Header Compression for HTTP/2”
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 25 @delabassee
Browsers support… as of Novembre 17 2015
http://caniuse.com/http2
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee26
HTTP/2 Features
• Binary Framing over single TCP connection • Request/Response multiplexing • Stream Prioritization • Server Push • Upgrade from HTTP 1.1 • Header Compression • Preserve HTTP semantic
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 27 @delabassee
HTTP/2
• Fully bi-‐directional – ConnectionA TCP socket –Message A logical HTTP message, such as a request or a response – Stream A bi-‐directional “channel” within a connection, carry one or more message – FrameThe smallest unit of communication in HTTP/2
Lets you do more things with a single TCP connection
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 28 @delabassee
HTTP/2Connections, Streams, Messages, Frames
@delabasseeCopyright © 2015, Oracle and/or its affiliates. All rights reserved.
Binary Frames
• Frames - HEADERS, DATA, PRIORITY, RST_STREAM, SETTINGS, PUSH_PROMISE, PING, GOAWAY, WINDOW_UPDATE, CONTINUATION - Prioritisation, Flow Control, Server Push, …
• Single TCP Connection
29
POST /upload HTTP/1.1 Host: www.test.com Content-‐Type: application/json Content-‐Length: 15
{“name”:“duke”}
HTTP 1.1 HTTP/2
HEADERS frame
DATA frame
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 30 @delabassee
Length (24)
Type (8) Flags (8)
R Stream Identifier (31)
Frame Payload (0 …)
Binary Frames
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 31 @delabassee
HTTP/2 Binary Framing
GET /index.html HTTP/1.1Host: example.comAccept: text/html
Example 1
HEADERS + END_STREAM + END_HEADERS :method: GET :scheme: http :path: /index.html :authority: example.org accept: text/html
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 32 @delabassee
HTTP/2 Binary Framing
HTTP/1.1 200 OKContent-‐Length: 11Content-‐Type: text/html Hello World
Example 2
HEADERS -‐ END_STREAM + END_HEADERS :status: 200 content-‐length: 11 content-‐type: text/html DATA + END_STREAM Hello World
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 33 @delabassee
Multiplexing
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 34 @delabassee
Stream Prioritization
• Stream Dependency in HEADERS Frame • PRIORITY frame type • An additional 40 bytes - Stream id (31) - Weight (8): [1, 256] - Exclusive bit (1)
• Only an advice
A
B C
4 12
A
B CD
4 16 12
exclusive = 0
A
B C
D
4 12
16
exclusive = 1
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee#HTTP/2
Server Push
/index.html stream 1 /style.css stream 2 /logo.gif stream 4
Client Server
stream 1 HEADERS
stream 1 DATA
stream 2 PROMISE
stream 4 PROMISE
• No JavaScript API!
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 36 @delabassee
Header CompressionHPack
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 37 @delabassee
Upgrade from HTTP 1.1
• HTTP - Port 80 - HTTP Upgrade to “h2c” (101 Switching Protocol)
• HTTPS (*) - Application Layer Protocol Negotiation (ALPN) - Next Protocol Negotiation (NPN)
(*) TLS is not mandatory
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 38 @delabassee
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 39 @delabassee
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 40
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Agenda
Why HTTP/2?
HTTP/2
HTTP/2 and Java SE
HTTP/2 and Java EE
Summary
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Java 9 Support for HTTP/2• JEP 110 - http://openjdk.java.net/jeps/110
• Supports both HTTP 1.1 and 2 • Easy to use API • Covers only the most common use cases • Synchronous & Asynchronous
42#HTTP/2
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Java 9
HttpClient client = HttpClient.create() .sslContext(ctx) .followRedirects(HttpRedirect.ALWAYS) .executorService(…) .build();
HttpRequest.Builder builder = client.request(new URI(target)) .body(noBody());
HttpResponse response = builder.GET().send(); // do something with the response…
43
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Java 9// HttpRequest builder from the default HttpClient HttpResponse response = HttpRequest.create(new URI("http://www.abc.be")) .send(HttpRequest.noBody());
String responseBody = response.body(HttpResponse.asString());
response = HttpRequest.create(new URI("http://www.abc.be")) .body(fromString("param1=Abc")) .post() .send(); …
44
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Java 9HttpClient cl = HttpClient.create() .proxy("http",proxAd).proxy("https", proxAd) .sslContext(ctx) .build();
CompletableFuture<String> compFut = cl.request(uri) .body(noBody()) .GET() .sendAsync() .thenCompose((HttpResponse response) -‐> { return response.bodyAsync(asString()); });
String body = compFut.get(5, TimeUnit.SECONDS); …
45
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Agenda
Why HTTP/2?
HTTP/2
HTTP/2 and Java SE
HTTP/2 and Java EE
Summary
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 47 @delabassee
• Request/Response multiplexing • Binary Framing • Stream Prioritization • Server Push • Header Compression • Upgrade from HTTP 1.1 – ALPN – 101 Switching Protocols
HTTP/2
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 48 @delabassee
• Request/Response Multiplexing • Binary Framing • Stream Prioritization • Server Push • Header Compression • Upgrade from HTTP 1.1 – ALPN – 101 Switching Protocols
Features to be Exposed in the Servlet API
Servlet 4
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 49 @delabassee
• Push resource to client for a given url and headers • May add callback for completion or error of a push • Not a replacement for WebSocket
Servlet 4.0 -‐ Server Push
Copyright © 2015, Oracle and/or its affiliates. All rights reserved.
PushBuilder builder = baseRequest.getPushBuilder();
builder.addHeader(“X-Pusher", …);
builder.path(aResource) .etag(associated._etag) .lastModified(associated._lastModified) .push();
50
Server Push
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
Agenda
Why HTTP/2?
HTTP/2
HTTP/2 and Java SE
HTTP/2 and Java EE
Summary
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
HTTP/2
• Address the Limitations of HTTP 1.x - Improve ressources utilization, performance, reduce latency
• “Compatible” with HTTP 1.1 - Retain HTTP 1.1 semantics
- Define interaction with HTTP 1.1 - Undo your HTTP 1.1 tricks!!
• “TLS not mandatory”
52
Hypertext Transfer Protocol version 2 & HPACK
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee
HTTP/2 and Java
• JEP 110 brings HTTP/2 to Java SE • Servlet 4.0 brings HTTP/2 to Java EE - Expose key features to the API • Server Push • Stream Prioritization • HTTP 1.1 upgrade
• Timing TBC!
53
Plans
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee#HTTP/2 54
شكرا
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. @delabassee#HTTP/2
Resources (and credits)
• http://http2.github.io • http://chimera.labs.oreilly.com/books/1230000000545/ch12.html • https://java.net/projects/servlet-‐spec/ • http://glassfish.org/adoptajsr • http://openjdk.java.net/jeps/110
55
Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 56