http/2 comes to java (dec. 2015 version)

53
HTTP/2 comes to Java! JCConf Taiwan 2015 David Delabassee @delabassee Oracle Copyright © 2015, Oracle and/or its affiliates. All rights reserved. 1

Upload: david-delabassee

Post on 14-Feb-2017

428 views

Category:

Software


0 download

TRANSCRIPT

Page 1: HTTP/2 comes to Java (Dec. 2015 version)

HTTP/2&comes&to&Java!&JCConf&Taiwan&2015

David&Delabassee&

@delabassee&

Oracle

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.*

1

Page 2: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee

Page 3: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 4: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 5: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 6: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 6 @delabassee

Data*Never*Sleeps*2.0

https://www.domo.com/learn/dataRneverRsleepsR2

Page 7: HTTP/2 comes to Java (Dec. 2015 version)

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*

Page 8: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 8 @delabassee

Page 9: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 9 @delabassee

Page 10: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 10 @delabassee

Page 11: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 11 @delabassee

Page 12: HTTP/2 comes to Java (Dec. 2015 version)

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

.&

.&

.&

Page 13: HTTP/2 comes to Java (Dec. 2015 version)

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*

Page 14: HTTP/2 comes to Java (Dec. 2015 version)

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/howRoneRsecondRcouldRcostRamazonR16RbillionRsales*(2)*RadView*Spring*2015*State*of*the*Union:*Ecommerce*Page*Speed*&*Web*Performance

Page 15: HTTP/2 comes to Java (Dec. 2015 version)

@delabasseeCopyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved.

HTTP*1.1HeadCofCLine&blocking

16

Client Server

index.htmlindex.html

style1.css*script.js*

...style1.css*script.js*

...

Page 16: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 17 @delabassee

HTTP*1.1

Page 17: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 18: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 19 @delabassee

File*Concatenation*and*Image*Sprites

Page 19: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 20 @delabassee

HTTP*1.1Workaround&C&Domain&Sharding

Page 20: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 21 @delabassee

Asset*inlining

…*<img"src="data:image/gif;base64,R0lGODlhEAAOexs3eeALMAAOazToeHh0tLS/7LZv0jvb29tf3Ubge8WSLrhf3kdbW1mxsjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfGfHyt56HGfGH56ge8WSLf6GGHhfkjfhhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3pBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3vvhdsbxusbasbPmfyH5BAAAjAAAALAAfhGHhcjAAAAQAA4lsjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3GfHyt56HGfGH56ge8WsjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfGfHyt56HGfGH56gebxus38G8WSLf6GGHvvhdsbxusbaSLf6GGHvvhdsbxusbaOiQA4lsjkhfkjf4lsjkhfkjf4lsjbxus38GkhfkjfhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3DcPjjBceXsplojj…”"/>"…

Page 21: HTTP/2 comes to Java (Dec. 2015 version)

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*longRlived*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&

Page 22: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 23: HTTP/2 comes to Java (Dec. 2015 version)

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”**

Page 24: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 25 @delabassee

Browsers*support…&as&of&November&2015

http://caniuse.com/http2*

Page 25: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 26: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 27: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 27 @delabassee

HTTP/2

• Fully*biRdirectional*– ConnectionA*TCP*socket*–Message* A*logical*HTTP*message,*such*as*a*request*or*a*response**– Stream A*biRdirectional*“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

Page 28: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 28 @delabassee

HTTP/2Connections,&Streams,&Messages,&Frames

Page 29: HTTP/2 comes to Java (Dec. 2015 version)

@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*ContentRType:*application/json*ContentRLength:*15*

{“name”:“duke”}

HTTP&1.1 HTTP/2

HEADERS&frame

DATA&frame

Page 30: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 30 @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

Page 31: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 31 @delabassee

HTTP/2*Binary*Framing

HTTP/1.1*200*OKContentRLength:*84ContentRType:*text/html <!doctype*html>*<head>*<meta*charset=utfR8>*</head>*<body>Hello*World</body>*</html>

Example&2

HEADERS ****R*END_STREAM****+*END_HEADERS ********:status:*200********contentRlength:*84********contentRtype:*text/html DATA****+*END_STREAM <!doctype*html>…

Page 32: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 32 @delabassee

Multiplexing

Page 33: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 33 @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

Page 34: HTTP/2 comes to Java (Dec. 2015 version)

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!

Page 35: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 35 @delabassee

Header*CompressionHPack

Page 36: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 36 @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

Page 37: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee37

&Demo?

Page 38: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 39: HTTP/2 comes to Java (Dec. 2015 version)

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

39#HTTP/2

Page 40: HTTP/2 comes to Java (Dec. 2015 version)

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…"

40

Page 41: HTTP/2 comes to Java (Dec. 2015 version)

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()AAAAAAAAAAAAAAAAAAAAAAA.send();"…

41

Page 42: HTTP/2 comes to Java (Dec. 2015 version)

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)"l>"{"""""""""""""""""""""""""""""""""""return"response.bodyAsync(asString());"""""""""""""""""""""""""""});"

String"body"="compFut.get(5,"TimeUnit.SECONDS);"…

42

Page 43: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 44: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 44 @delabassee

• Request/Response*multiplexing*• Binary*Framing*• Stream*Prioritization*• Server*Push*• Header*Compression*• Upgrade*from*HTTP*1.1*– ALPN*– 101*Switching*Protocols

HTTP/2

Page 45: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 45 @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

Page 46: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 46 @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*R*Server*Push

Page 47: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*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();

47

Server*Push

Page 48: HTTP/2 comes to Java (Dec. 2015 version)

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

Page 49: HTTP/2 comes to Java (Dec. 2015 version)

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!!*

• “TLS0not0mandatory”

49

Hypertext&Transfer&Protocol&version&2&&&HPACK

Page 50: HTTP/2 comes to Java (Dec. 2015 version)

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*• HTTP*1.1*upgrade*

• Timing*TBC!

50

Plans

Page 51: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee51

&��

Page 52: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*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*• https://java.net/projects/servletRspec/*• http://glassfish.org/adoptajsr*• http://openjdk.java.net/jeps/110

52

Page 53: HTTP/2 comes to Java (Dec. 2015 version)

Copyright*©*2015,*Oracle*and/or*its*affiliates.*All*rights*reserved. 53