HTTP/2 comes to Java

David Delabassee
David DelabasseeDevRel - Java Platform Group - Oracle à Oracle
HTTP/2&comes&to&Java!&
David&Delabassee&
@delabassee&
Oracle
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.*
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
About*me…
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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 3
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Copyright*©*2016,*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*©*2016,*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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 7 @delabassee
Data*Never*Sleeps*3.0
www.domo.com/blog/2015/08/dataTneverTsleepsT3T0/
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 8 @delabassee
HTTP*1.x
1991* 1996* 1999* 2009* 2015*
HTTP/0.9*
HTTP/1.0*
HTTP/1.1*
SPDY*
HTTP/2.0*
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 9 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 10 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 11 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 12 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 13 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 14 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 15 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 16 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 17 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 18 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 19 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 21 @delabassee
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 22 @delabassee
Today
index.html
style1.css
style2.css
.&
.&
.&
script1.js
script9.js
pic1.jpg
pic8.jpg
.&
.&
.&
photo1.png
photo2.png
.&
.&
.&
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 23 @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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 24 @delabassee
Requests**vs.*Connections
http://httparchive.org/
Connections*per*Page
Total*Requests*per*Page
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 25 @delabassee
Transfer*size
https://developers.google.com/web/fundamentals/performance/optimizingTcontentTefficiency
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 26 @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*Rate
Time&is&Money!
(1)*http://www.fastcompany.com/1825005/howToneTsecondTcouldTcostTamazonT16TbillionTsales*
(2)*RadView*Spring*2015*State*of*the*Union:*Ecommerce*Page*Speed*&*Web*Performance
@delabasseeCopyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.
HTTP*1.1
Head=of=Line&blocking
27
Client Server
index.html
index.html
style1.css*
script.js*
...
style1.css*
script.js*
...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 28 @delabassee
HTTP*1.1
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 29 @delabassee
File*Concatenation*and*Image*Sprites
• Modern*web*page*consists*of*+90*resources*fetched*from*15*distinct*
hosts*(*)*
• TCP*Efficiency*Improves*with*Larger*Files*
• Shoving*more*than*one*logical*file*into*one*physical*file
(*)*http://httparchive.org
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 30 @delabassee
File*Concatenation*and*Image*Sprites
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 31 @delabassee
HTTP*1.1
Workaround&=&Domain&Sharding
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 32 @delabassee
Asset*inlining
…*
<img"src="data:image/gif;base64,R0lGODlhEAAOexs3eeALMAAOazToeHh0tLS/
7LZv0jvb29tf3Ubge8WSLrhf3kdbW1mxsjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfGfHy
t56HGfGH56ge8WSLf6GGHhfkjfhhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYty
GhBKoOjJj6GGHvvhdsbxus38GV3pBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoO
jJj6GGHvvhdsbxus38GV3vvhdsbxusbasbPmfyH5BAAAjAAAALAAfhGHhcjAAAAQAA4l
sjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnu
IoYtyGhBKoOjJj6GGHvvhdsbxus38GV3GfHyt56HGfGH56ge8WsjkhfkjfhGHhcjGDSH
JUYgJvhgtyrHgfGfHyt56HGfGH56gebxus38G8WSLf6GGHvvhdsbxusbaSLf6GGHvvhd
sbxusbaOiQA4lsjkhfkjf4lsjkhfkjf4lsjbxus38GkhfkjfhfkjfhpBREzxvt6QAA4l
sjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3DcPjjBceXsplojj…”"/>"
…
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 33 @delabassee
• HTTP*uses*TCP*poorly*
- HTTP:*short*and*bursty*flows*Vs.*TCP:*optimized*for*longTlived*flows*
• Solutions*
- Sprites*
- Domain*sharding*
- Assets*Inlining*
- File*concatenations*
- …
HTTP/1.1*circa*1999
Problems&Vs&Solutions
1991& 1996& 1999& 2009& 2015&
HTTP/0.9&
HTTP/1.0&
HTTP/1.1&
SPDY&
HTTP/2.0&
Copyright*©*2016,*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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
HTTP/2
• Jan*2015*
• Feb*2015*
• May*2015
35
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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Adoption
36
Last*year*we*announced*our*intent*to*end*support*for*the*experimental*
protocol*SPDY*in*favor*of*the*standardized*version,*HTTP/2.*HTTP/2*is*the*
nextTgeneration*protocol*for*transferring*information*on*the*web,*improving*
upon*HTTP/1.1*with*more*features*leading*to*better*performance.**
Since&then&we've&seen&huge&adoption&of&HTTP/2&from&both&web&servers&
and&browsers,*with*most*now*supporting*HTTP/2.*Over&25%&of&resources&in&
Chrome&are&currently&served&over&HTTP/2,*compared*to*less*than*5%*over*
SPDY.*Based*on*such*strong*adoption,*starting*on*May*15th*—*the*
anniversary*of*the*HTTP/2*RFC*—*Chrome*will*no*longer*support*SPDY.*…
http://blog.chromium.org/2016/02/transitioningTfromTspdyTtoThttp2.html
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 37 @delabassee
Browsers*support
…&as&of&November&2015
http://caniuse.com/http2*
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee38
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*
• Flow*Control
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 39 @delabassee
HTTP/2
• Fully*biTdirectional*
– Connection

A*TCP*socket*
– Message*

A*logical*HTTP*message,*such*as*a*request*or*a*response**
– Stream

A*biTdirectional*“channel”*within*a*connection,*carry*one*or*more*message*
– Frame

The*smallest*unit*of*communication*in*HTTP/2
Lets&you&do&more&things&with&a&single&TCP&connection
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 40 @delabassee
HTTP/2
Connections,&Streams,&Messages,&Frames
@delabasseeCopyright*©*2016,*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
41
POST*/upload*HTTP/1.1*
Host:*www.test.com*
ContentTType:*application/json*
ContentTLength:*15*
{“name”:“duke”}
HTTP&1.1
@delabasseeCopyright*©*2016,*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
41
POST*/upload*HTTP/1.1*
Host:*www.test.com*
ContentTType:*application/json*
ContentTLength:*15*
{“name”:“duke”}
HTTP&1.1 HTTP/2
HEADERS&frame
DATA&frame
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 42 @delabassee
Length&(24)
Type&(8) Flags&(8)
R Stream&Identifier&(31)
Frame&Payload&(0&…)
Binary*Frames
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 43 @delabassee
HTTP/2*Binary*Framing
GET*/index.html*HTTP/1.1

Host:*example.com

Accept:*text/html
Example&1
HEADERS

****+*END_STREAM

****+*END_HEADERS

********:method:*GET

********:scheme:*http

********:path:*/index.html

********:authority:*example.org

********accept:*text/html
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 44 @delabassee
HTTP/2*Binary*Framing
HTTP/1.1*200*OK

ContentTLength:*84

ContentTType:*text/html



<!doctype*html>*
<head>*
<meta*charset=utfT8>*
</head>*
<body>Hello*World</body>*
</html>
Example&2
HEADERS

****T*END_STREAM

****+*END_HEADERS

********:status:*200

********contentTlength:*84

********contentTtype:*text/html



DATA

****+*END_STREAM

<!doctype*html>…
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 45 @delabassee
Multiplexing
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 46 @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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 47 @delabassee
Flow*Control
• Mechanism*to*prevent*the*Sender*from*overwhelming*the*Receiver*
• Allow*the*client*and*server*to*implement*own*streamT*and*connectionTlevel*flow*
control*
• SETTINGS*&*WINDOW_UPDATE*frames*
• Similar*to*TCP*Flow*Control*
- For*HTTP/2*multiplexed*streams*
• HopTbyThop,*not*endTtoTend
Copyright*©*2016,*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
Copyright*©*2016,*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
Copyright*©*2016,*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&2&&&&
PROMISE
Copyright*©*2016,*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&2&&&&
PROMISE
stream&4&
PROMISE
Copyright*©*2016,*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
Copyright*©*2016,*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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 49 @delabassee
Header*Compression
HPack
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 50 @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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee51
&Demo?
Copyright*©*2016,*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*©*2016,*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
53#HTTP/2
Copyright*©*2016,*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…"
54
Copyright*©*2016,*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…"
54
Copyright*©*2016,*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…"
54
Copyright*©*2016,*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()A
AAAAAAAAAAAAAAAAAAAAAA.send();"
…
55
Copyright*©*2016,*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()A
AAAAAAAAAAAAAAAAAAAAAA.send();"
…
55
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
HttpClient"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)"l>"{"
""""""""""""""""""""""""""""""""""return"response.bodyAsync(asString());"
""""""""""""""""""""""""""});"
String"body"="compFut.get(5,"TimeUnit.SECONDS);"
…
56
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
HttpClient"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)"l>"{"
""""""""""""""""""""""""""""""""""return"response.bodyAsync(asString());"
""""""""""""""""""""""""""});"
String"body"="compFut.get(5,"TimeUnit.SECONDS);"
…
56
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
HttpClient"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)"l>"{"
""""""""""""""""""""""""""""""""""return"response.bodyAsync(asString());"
""""""""""""""""""""""""""});"
String"body"="compFut.get(5,"TimeUnit.SECONDS);"
…
56
Copyright*©*2016,*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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 58 @delabassee
• Request/Response*multiplexing*
• Binary*Framing*
• Stream*Prioritization*
• Server*Push*
• Header*Compression*
• Upgrade*from*HTTP*1.1*
– ALPN*
– 101*Switching*Protocols
HTTP/2
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 59 @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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 60 @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*T*Server*Push
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.
PushBuilderAbuilder = baseRequest.getPushBuilder();
builder.addHeader(“X-Pusher", …);
builder.path(aResource)
.etag(associated._etag)
.lastModified(associated._lastModified)
.push();
61
Server*Push
Copyright*©*2016,*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*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee63
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*
• Flow*Control
Copyright*©*2016,*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!!*
• “TLS0not0mandatory”
64
Hypertext&Transfer&Protocol&version&2&&&HPACK
Copyright*©*2016,*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*
• HTTP*1.1*upgrade*
• Timing*TBC!
65
Plans
Copyright*©*2016,*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*
• HTTP*1.1*upgrade*
• Timing*TBC!
65
Plans
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee66
&
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Resources*(and*credits)
• http://http2.github.io*
• http://chimera.labs.oreilly.com/books/1230000000545/ch12.html*
• http://openjdk.java.net/jeps/110*
• https://java.net/projects/servletTspec/
67
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 68
1 sur 79

Recommandé

Java EE 8 - Work in progress par
Java EE 8 - Work in progressJava EE 8 - Work in progress
Java EE 8 - Work in progressDavid Delabassee
2.5K vues80 diapositives
HTTP/2 comes to Java (Dec. 2015 version) par
HTTP/2 comes to Java (Dec. 2015 version)HTTP/2 comes to Java (Dec. 2015 version)
HTTP/2 comes to Java (Dec. 2015 version)David Delabassee
690 vues53 diapositives
Java EE 7 (Lyon JUG & Alpes JUG - March 2014) par
Java EE 7 (Lyon JUG & Alpes JUG  - March 2014)Java EE 7 (Lyon JUG & Alpes JUG  - March 2014)
Java EE 7 (Lyon JUG & Alpes JUG - March 2014)David Delabassee
4.8K vues76 diapositives
Java EE 8 - February 2017 update par
Java EE 8 - February 2017 updateJava EE 8 - February 2017 update
Java EE 8 - February 2017 updateDavid Delabassee
6K vues65 diapositives
Java EE Next par
Java EE NextJava EE Next
Java EE NextDavid Delabassee
2.2K vues44 diapositives
Oracle Database features every developer should know about par
Oracle Database features every developer should know aboutOracle Database features every developer should know about
Oracle Database features every developer should know aboutgvenzl
545 vues54 diapositives

Contenu connexe

Tendances

Java EE Next - BeJUG JavaOne Afterglow 2016 par
Java EE Next - BeJUG JavaOne Afterglow 2016Java EE Next - BeJUG JavaOne Afterglow 2016
Java EE Next - BeJUG JavaOne Afterglow 2016David Delabassee
433 vues26 diapositives
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! par
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! David Delabassee
1.1K vues40 diapositives
HTML5 based PivotViewer for Visualizing LInked Data par
HTML5 based PivotViewer for Visualizing LInked Data HTML5 based PivotViewer for Visualizing LInked Data
HTML5 based PivotViewer for Visualizing LInked Data Kingsley Uyi Idehen
6.6K vues23 diapositives
Java EE 8 Overview (Japanese) par
Java EE 8 Overview (Japanese)Java EE 8 Overview (Japanese)
Java EE 8 Overview (Japanese)Logico
984 vues91 diapositives
Related OSS Projects - Peter Rowe, Flexera Software par
Related OSS Projects - Peter Rowe, Flexera SoftwareRelated OSS Projects - Peter Rowe, Flexera Software
Related OSS Projects - Peter Rowe, Flexera SoftwareOpenStack
340 vues29 diapositives
Migrating your infrastructure to OpenStack - Avi Miller, Oracle par
Migrating your infrastructure to OpenStack - Avi Miller, OracleMigrating your infrastructure to OpenStack - Avi Miller, Oracle
Migrating your infrastructure to OpenStack - Avi Miller, OracleOpenStack
373 vues28 diapositives

Tendances(20)

Java EE Next - BeJUG JavaOne Afterglow 2016 par David Delabassee
Java EE Next - BeJUG JavaOne Afterglow 2016Java EE Next - BeJUG JavaOne Afterglow 2016
Java EE Next - BeJUG JavaOne Afterglow 2016
David Delabassee433 vues
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! par David Delabassee
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur! Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
Java EE 7 et ensuite pourquoi pas JavaScript sur le serveur!
David Delabassee1.1K vues
HTML5 based PivotViewer for Visualizing LInked Data par Kingsley Uyi Idehen
HTML5 based PivotViewer for Visualizing LInked Data HTML5 based PivotViewer for Visualizing LInked Data
HTML5 based PivotViewer for Visualizing LInked Data
Java EE 8 Overview (Japanese) par Logico
Java EE 8 Overview (Japanese)Java EE 8 Overview (Japanese)
Java EE 8 Overview (Japanese)
Logico 984 vues
Related OSS Projects - Peter Rowe, Flexera Software par OpenStack
Related OSS Projects - Peter Rowe, Flexera SoftwareRelated OSS Projects - Peter Rowe, Flexera Software
Related OSS Projects - Peter Rowe, Flexera Software
OpenStack340 vues
Migrating your infrastructure to OpenStack - Avi Miller, Oracle par OpenStack
Migrating your infrastructure to OpenStack - Avi Miller, OracleMigrating your infrastructure to OpenStack - Avi Miller, Oracle
Migrating your infrastructure to OpenStack - Avi Miller, Oracle
OpenStack373 vues
Java API for WebSocket 1.0: Java EE 7 and GlassFish par Arun Gupta
Java API for WebSocket 1.0: Java EE 7 and GlassFishJava API for WebSocket 1.0: Java EE 7 and GlassFish
Java API for WebSocket 1.0: Java EE 7 and GlassFish
Arun Gupta23K vues
Another compilation method in java - AOT (Ahead of Time) compilation par Logico
Another compilation method in java - AOT (Ahead of Time) compilationAnother compilation method in java - AOT (Ahead of Time) compilation
Another compilation method in java - AOT (Ahead of Time) compilation
Logico 3.6K vues
Top 10 SQL Performance tips & tricks for Java Developers par gvenzl
Top 10 SQL Performance tips & tricks for Java DevelopersTop 10 SQL Performance tips & tricks for Java Developers
Top 10 SQL Performance tips & tricks for Java Developers
gvenzl659 vues
Exploiting Linked (Open) Data via Microsoft Access par Kingsley Uyi Idehen
Exploiting Linked (Open) Data via Microsoft AccessExploiting Linked (Open) Data via Microsoft Access
Exploiting Linked (Open) Data via Microsoft Access
Using SAP Crystal Reports as a Linked (Open) Data Front-End via ODBC par Kingsley Uyi Idehen
Using SAP Crystal Reports as a Linked (Open) Data Front-End via ODBCUsing SAP Crystal Reports as a Linked (Open) Data Front-End via ODBC
Using SAP Crystal Reports as a Linked (Open) Data Front-End via ODBC
Getting Started: Developing Tropo Applications par Cisco DevNet
Getting Started: Developing Tropo ApplicationsGetting Started: Developing Tropo Applications
Getting Started: Developing Tropo Applications
Cisco DevNet323 vues
Supercharge your Code to get optimal Database Performance par gvenzl
Supercharge your Code to get optimal Database PerformanceSupercharge your Code to get optimal Database Performance
Supercharge your Code to get optimal Database Performance
gvenzl501 vues
Virtuoso ODBC Driver Configuration & Usage (Windows) par Kingsley Uyi Idehen
Virtuoso ODBC Driver Configuration & Usage (Windows)Virtuoso ODBC Driver Configuration & Usage (Windows)
Virtuoso ODBC Driver Configuration & Usage (Windows)
Nonblocking Database Access in Helidon SE par Dmitry Kornilov
Nonblocking Database Access in Helidon SENonblocking Database Access in Helidon SE
Nonblocking Database Access in Helidon SE
Dmitry Kornilov866 vues
Adopt-a-JSR for JSON Processing 1.1, JSR 374 par Heather VanCura
Adopt-a-JSR for JSON Processing 1.1, JSR 374Adopt-a-JSR for JSON Processing 1.1, JSR 374
Adopt-a-JSR for JSON Processing 1.1, JSR 374
Heather VanCura6.5K vues
Virtuoso ODBC Driver Configuration & Usage (Mac OS X) par Kingsley Uyi Idehen
Virtuoso ODBC Driver Configuration & Usage (Mac OS X)Virtuoso ODBC Driver Configuration & Usage (Mac OS X)
Virtuoso ODBC Driver Configuration & Usage (Mac OS X)
Kingsley Uyi Idehen34.9K vues
Oracle APEX 기초 워크샵 - 실습 가이드 문서: Part 2 (2/2) par Taewan Kim
Oracle APEX 기초 워크샵 - 실습 가이드 문서:  Part 2 (2/2)Oracle APEX 기초 워크샵 - 실습 가이드 문서:  Part 2 (2/2)
Oracle APEX 기초 워크샵 - 실습 가이드 문서: Part 2 (2/2)
Taewan Kim1.2K vues
Cisco Spark & Tropo API Workshop par Cisco DevNet
Cisco Spark & Tropo API WorkshopCisco Spark & Tropo API Workshop
Cisco Spark & Tropo API Workshop
Cisco DevNet1.5K vues
MySQL Tech Café #8: MySQL 8.0 for Python Developers par Frederic Descamps
MySQL Tech Café #8: MySQL 8.0 for Python DevelopersMySQL Tech Café #8: MySQL 8.0 for Python Developers
MySQL Tech Café #8: MySQL 8.0 for Python Developers

Similaire à HTTP/2 comes to Java

Oracle Keynote from JMagghreb 2014 par
Oracle Keynote from JMagghreb 2014Oracle Keynote from JMagghreb 2014
Oracle Keynote from JMagghreb 2014Simon Ritter
693 vues39 diapositives
Apex day 1.0 oracle apex 5.0 patrick wolf par
Apex day 1.0 oracle apex 5.0 patrick wolfApex day 1.0 oracle apex 5.0 patrick wolf
Apex day 1.0 oracle apex 5.0 patrick wolfAPEX Solutions - Natural Intelligence
592 vues22 diapositives
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL as document database!? par
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL as document database!?[db tech showcase 2015 Sapporo HOKKAIDO] MySQL as document database!?
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL as document database!?Ryusuke Kajiyama
1.1K vues33 diapositives
GTRI.com Splunk for Vmware APP par
GTRI.com Splunk for Vmware APPGTRI.com Splunk for Vmware APP
GTRI.com Splunk for Vmware APPZivaro Inc
635 vues21 diapositives
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7 par
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7Ryusuke Kajiyama
1.3K vues64 diapositives
Oracle RAC - A Safe Investment into the Future of Your IT par
Oracle RAC - A Safe Investment into the Future of Your ITOracle RAC - A Safe Investment into the Future of Your IT
Oracle RAC - A Safe Investment into the Future of Your ITMarkus Michalewicz
1.4K vues40 diapositives

Similaire à HTTP/2 comes to Java(20)

Oracle Keynote from JMagghreb 2014 par Simon Ritter
Oracle Keynote from JMagghreb 2014Oracle Keynote from JMagghreb 2014
Oracle Keynote from JMagghreb 2014
Simon Ritter693 vues
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL as document database!? par Ryusuke Kajiyama
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL as document database!?[db tech showcase 2015 Sapporo HOKKAIDO] MySQL as document database!?
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL as document database!?
Ryusuke Kajiyama1.1K vues
GTRI.com Splunk for Vmware APP par Zivaro Inc
GTRI.com Splunk for Vmware APPGTRI.com Splunk for Vmware APP
GTRI.com Splunk for Vmware APP
Zivaro Inc635 vues
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7 par Ryusuke Kajiyama
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7
[db tech showcase 2015 Sapporo HOKKAIDO] MySQL 5.7
Ryusuke Kajiyama1.3K vues
Oracle RAC - A Safe Investment into the Future of Your IT par Markus Michalewicz
Oracle RAC - A Safe Investment into the Future of Your ITOracle RAC - A Safe Investment into the Future of Your IT
Oracle RAC - A Safe Investment into the Future of Your IT
Markus Michalewicz1.4K vues
3° Sessione Oracle - CRUI: Mobile&Conversational Interface par Jürgen Ambrosi
3° Sessione Oracle - CRUI: Mobile&Conversational Interface3° Sessione Oracle - CRUI: Mobile&Conversational Interface
3° Sessione Oracle - CRUI: Mobile&Conversational Interface
Jürgen Ambrosi689 vues
Tecnologias Oracle em Docker Containers On-premise e na Nuvem par Bruno Borges
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Bruno Borges1.6K vues
9thMeetup-20190316-CI/CD 기반의 Microservice 배포 par DongHee Lee
9thMeetup-20190316-CI/CD 기반의 Microservice 배포9thMeetup-20190316-CI/CD 기반의 Microservice 배포
9thMeetup-20190316-CI/CD 기반의 Microservice 배포
DongHee Lee130 vues
[Java Küche RDB 最前線 2015] MySQL 5.7技術アップデート par Ryusuke Kajiyama
[Java Küche RDB 最前線 2015] MySQL 5.7技術アップデート[Java Küche RDB 最前線 2015] MySQL 5.7技術アップデート
[Java Küche RDB 最前線 2015] MySQL 5.7技術アップデート
Ryusuke Kajiyama1.1K vues
Develop Oracle Virtual Box and deploy to Cloud par Inprise Group
Develop Oracle Virtual Box and deploy to CloudDevelop Oracle Virtual Box and deploy to Cloud
Develop Oracle Virtual Box and deploy to Cloud
Inprise Group1.5K vues
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ... par tdc-globalcode
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
TDC2018SP | Trilha Arq Java - Crie arquiteturas escalaveis, multi-language e ...
tdc-globalcode68 vues
Oracle GoldenGate on Docker par Bobby Curtis
Oracle GoldenGate on DockerOracle GoldenGate on Docker
Oracle GoldenGate on Docker
Bobby Curtis2.6K vues
Hybrid mobile development with Oracle JET par Rohit Dhamija
Hybrid mobile development with Oracle JETHybrid mobile development with Oracle JET
Hybrid mobile development with Oracle JET
Rohit Dhamija706 vues

Plus de David Delabassee

JVMs in Containers - Best Practices par
JVMs in Containers - Best PracticesJVMs in Containers - Best Practices
JVMs in Containers - Best PracticesDavid Delabassee
726 vues37 diapositives
JVMs in Containers par
JVMs in ContainersJVMs in Containers
JVMs in ContainersDavid Delabassee
1.3K vues38 diapositives
Serverless Java Challenges & Triumphs par
Serverless Java Challenges & TriumphsServerless Java Challenges & Triumphs
Serverless Java Challenges & TriumphsDavid Delabassee
1.2K vues46 diapositives
Serverless Java - Challenges and Triumphs par
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and TriumphsDavid Delabassee
282 vues41 diapositives
Randstad Docker meetup - Serverless par
Randstad Docker meetup - ServerlessRandstad Docker meetup - Serverless
Randstad Docker meetup - ServerlessDavid Delabassee
322 vues37 diapositives
Java Serverless in Action - Voxxed Banff par
Java Serverless in Action - Voxxed BanffJava Serverless in Action - Voxxed Banff
Java Serverless in Action - Voxxed BanffDavid Delabassee
232 vues22 diapositives

Plus de David Delabassee(20)

Serverless Java - Challenges and Triumphs par David Delabassee
Serverless Java - Challenges and TriumphsServerless Java - Challenges and Triumphs
Serverless Java - Challenges and Triumphs
David Delabassee282 vues
EJB and CDI - Alignment and Strategy par David Delabassee
EJB and CDI - Alignment and StrategyEJB and CDI - Alignment and Strategy
EJB and CDI - Alignment and Strategy
David Delabassee31.9K vues
Java EE 8 - What’s new on the Web front par David Delabassee
Java EE 8 - What’s new on the Web frontJava EE 8 - What’s new on the Web front
Java EE 8 - What’s new on the Web front
David Delabassee960 vues
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0 par David Delabassee
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
Java EE 8 Adopt a JSR : JSON-P 1.1 & MVC 1.0
David Delabassee1.8K vues
HTTP/2 Comes to Java - What Servlet 4.0 Means to You par David Delabassee
HTTP/2 Comes to Java - What Servlet 4.0 Means to YouHTTP/2 Comes to Java - What Servlet 4.0 Means to You
HTTP/2 Comes to Java - What Servlet 4.0 Means to You
David Delabassee13.8K vues

Dernier

Is Entireweb better than Google par
Is Entireweb better than GoogleIs Entireweb better than Google
Is Entireweb better than Googlesebastianthomasbejan
12 vues1 diapositive
UiPath Document Understanding_Day 3.pptx par
UiPath Document Understanding_Day 3.pptxUiPath Document Understanding_Day 3.pptx
UiPath Document Understanding_Day 3.pptxUiPathCommunity
105 vues25 diapositives
WEB 2.O TOOLS: Empowering education.pptx par
WEB 2.O TOOLS: Empowering education.pptxWEB 2.O TOOLS: Empowering education.pptx
WEB 2.O TOOLS: Empowering education.pptxnarmadhamanohar21
16 vues16 diapositives
information par
informationinformation
informationkhelgishekhar
9 vues4 diapositives
Marketing and Community Building in Web3 par
Marketing and Community Building in Web3Marketing and Community Building in Web3
Marketing and Community Building in Web3Federico Ast
12 vues64 diapositives
DU Series - Day 4.pptx par
DU Series - Day 4.pptxDU Series - Day 4.pptx
DU Series - Day 4.pptxUiPathCommunity
106 vues28 diapositives

Dernier(10)

UiPath Document Understanding_Day 3.pptx par UiPathCommunity
UiPath Document Understanding_Day 3.pptxUiPath Document Understanding_Day 3.pptx
UiPath Document Understanding_Day 3.pptx
UiPathCommunity105 vues
Marketing and Community Building in Web3 par Federico Ast
Marketing and Community Building in Web3Marketing and Community Building in Web3
Marketing and Community Building in Web3
Federico Ast12 vues
PORTFOLIO 1 (Bret Michael Pepito).pdf par brejess0410
PORTFOLIO 1 (Bret Michael Pepito).pdfPORTFOLIO 1 (Bret Michael Pepito).pdf
PORTFOLIO 1 (Bret Michael Pepito).pdf
brejess04108 vues
IETF 118: Starlink Protocol Performance par APNIC
IETF 118: Starlink Protocol PerformanceIETF 118: Starlink Protocol Performance
IETF 118: Starlink Protocol Performance
APNIC297 vues
Building trust in our information ecosystem: who do we trust in an emergency par Tina Purnat
Building trust in our information ecosystem: who do we trust in an emergencyBuilding trust in our information ecosystem: who do we trust in an emergency
Building trust in our information ecosystem: who do we trust in an emergency
Tina Purnat100 vues
How to think like a threat actor for Kubernetes.pptx par LibbySchulze1
How to think like a threat actor for Kubernetes.pptxHow to think like a threat actor for Kubernetes.pptx
How to think like a threat actor for Kubernetes.pptx
LibbySchulze15 vues

HTTP/2 comes to Java