Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
HTTP/2&comes&to&Java!&
David&Delabassee&
@delabassee&
Oracle
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*re...
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*...
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*Ja...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Agenda
Why*HTTP/2?*
HTTP/2*
HTTP/2*and*Ja...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 7 @delabassee
Data*Never*Sleeps*3.0
www.domo.com/blog...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 8 @delabassee
HTTP*1.x
1991* 1996* 1999* 2009* 2015*
...
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...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 23 @delabassee
google.fr*(1st)*
• 3*HTTP*Requests*
• ...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 24 @delabassee
Requests**vs.*Connections
http://httpa...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 25 @delabassee
Transfer*size
https://developers.googl...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 26 @delabassee
• If*a*page*takes*longer*than*4*sec*to...
@delabasseeCopyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.
HTTP*1.1
Head=of=Line&blocking
27
Client S...
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
•...
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...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 33 @delabassee
• HTTP*uses*TCP*poorly*
- HTTP:*short*...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Agenda
Why*HTTP/2?*
HTTP/2*
HTTP/2*and*Ja...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
HTTP/2
• Jan*2015*
• Feb*2015*
• May*2015...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Adoption
36
Last*year*we*announced*our*in...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 37 @delabassee
Browsers*support
…&as&of&November&2015...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee38
HTTP/2*Features
• Binary*Framing*over*...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 39 @delabassee
HTTP/2
• Fully*biTdirectional*
– Conne...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 40 @delabassee
HTTP/2
Connections,&Streams,&Messages,...
@delabasseeCopyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.
Binary*Frames
• Frames*
- HEADERS,*DATA,*P...
@delabasseeCopyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.
Binary*Frames
• Frames*
- HEADERS,*DATA,*P...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 42 @delabassee
Length&(24)
Type&(8) Flags&(8)
R Strea...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 43 @delabassee
HTTP/2*Binary*Framing
GET*/index.html*...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 44 @delabassee
HTTP/2*Binary*Framing
HTTP/1.1*200*OK
...
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*Depende...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 47 @delabassee
Flow*Control
• Mechanism*to*prevent*th...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee#HTTP/2
Server*Push
/index.html***stream*1...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee#HTTP/2
Server*Push
/index.html***stream*1...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee#HTTP/2
Server*Push
/index.html***stream*1...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee#HTTP/2
Server*Push
/index.html***stream*1...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee#HTTP/2
Server*Push
/index.html***stream*1...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee#HTTP/2
Server*Push
/index.html***stream*1...
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*8...
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*Ja...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9*Support*for*HTTP/2
• JEP*110*
- ht...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
HttpClient"client"="HttpClient.cre...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
HttpClient"client"="HttpClient.cre...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
HttpClient"client"="HttpClient.cre...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
//"HttpRequest"builder"from"the"de...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
//"HttpRequest"builder"from"the"de...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
HttpClient"cl"="HttpClient.create(...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
HttpClient"cl"="HttpClient.create(...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Java*9
HttpClient"cl"="HttpClient.create(...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Agenda
Why*HTTP/2?*
HTTP/2*
HTTP/2*and*Ja...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 58 @delabassee
• Request/Response*multiplexing*
• Bin...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 59 @delabassee
• Request/Response*Multiplexing*
• Bin...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 60 @delabassee
• Push*resource*to*client*for*a*given*...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.
PushBuilderAbuilder = baseRequest.getPushBuilder();
b...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
Agenda
Why*HTTP/2?*
HTTP/2*
HTTP/2*and*Ja...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.* @delabassee63
HTTP/2*Features
• Binary*Framing*over*...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
HTTP/2
• Address*the*Limitations*of*HTTP*...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
HTTP/2*and*Java
• JEP*110*brings*HTTP/2*t...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
HTTP/2*and*Java
• JEP*110*brings*HTTP/2*t...
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.gi...
Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 68
Prochain SlideShare
Chargement dans…5
×

HTTP/2 comes to Java

Presented at the Ch'ti JUG
IUT A Lille1 - February 2014

  • Soyez le premier à commenter

HTTP/2 comes to Java

  1. 1. HTTP/2&comes&to&Java!& David&Delabassee& @delabassee& Oracle Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved.*
  2. 2. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee About*me…
  3. 3. 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
  4. 4. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee
  5. 5. 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
  6. 6. 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
  7. 7. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 7 @delabassee Data*Never*Sleeps*3.0 www.domo.com/blog/2015/08/dataTneverTsleepsT3T0/
  8. 8. 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*
  9. 9. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 9 @delabassee
  10. 10. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 10 @delabassee
  11. 11. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 11 @delabassee
  12. 12. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 12 @delabassee
  13. 13. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 13 @delabassee
  14. 14. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 14 @delabassee
  15. 15. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 15 @delabassee
  16. 16. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 16 @delabassee
  17. 17. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 17 @delabassee
  18. 18. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 18 @delabassee
  19. 19. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 19 @delabassee
  20. 20. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 21 @delabassee
  21. 21. 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 .& .& .&
  22. 22. 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*
  23. 23. 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
  24. 24. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 25 @delabassee Transfer*size https://developers.google.com/web/fundamentals/performance/optimizingTcontentTefficiency
  25. 25. 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
  26. 26. @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* ...
  27. 27. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 28 @delabassee HTTP*1.1
  28. 28. 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
  29. 29. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 30 @delabassee File*Concatenation*and*Image*Sprites
  30. 30. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 31 @delabassee HTTP*1.1 Workaround&=&Domain&Sharding
  31. 31. 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…”"/>" …
  32. 32. 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&
  33. 33. 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
  34. 34. 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”**
  35. 35. 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
  36. 36. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 37 @delabassee Browsers*support …&as&of&November&2015 http://caniuse.com/http2*
  37. 37. 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
  38. 38. 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
  39. 39. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 40 @delabassee HTTP/2 Connections,&Streams,&Messages,&Frames
  40. 40. @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
  41. 41. @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
  42. 42. 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
  43. 43. 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
  44. 44. 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>…
  45. 45. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 45 @delabassee Multiplexing
  46. 46. 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
  47. 47. 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
  48. 48. 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
  49. 49. 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
  50. 50. 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
  51. 51. 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
  52. 52. 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
  53. 53. 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!
  54. 54. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 49 @delabassee Header*Compression HPack
  55. 55. 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
  56. 56. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee51 &Demo?
  57. 57. 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
  58. 58. 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
  59. 59. 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
  60. 60. 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
  61. 61. 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
  62. 62. 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
  63. 63. 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
  64. 64. 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
  65. 65. 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
  66. 66. 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
  67. 67. 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
  68. 68. 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
  69. 69. 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
  70. 70. 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
  71. 71. 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
  72. 72. 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
  73. 73. 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
  74. 74. 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
  75. 75. 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
  76. 76. 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
  77. 77. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. @delabassee66 &
  78. 78. 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
  79. 79. Copyright*©*2016,*Oracle*and/or*its*affiliates.*All*rights*reserved. 68

×