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

4 802 vues

Publié le

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

Publié dans : Internet
6 commentaires
13 j’aime
Statistiques
Remarques
  • devops online training http://www.keylabstraining.com/devops-online-training-tutoria
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Hi All, We are planning to start new devops online batch on this week... If any one interested to attend the demo please register in our website... For this batch we are also provide everyday recorded sessions with Materials. For more information feel free to contact us : siva@keylabstraining.com. For Course Content and Recorded Demo Click Here : http://www.keylabstraining.com/devops-online-training-tutorial
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Hi All, We are planning to start new Salesforce Online batch on this week... If any one interested to attend the demo please register in our website... For this batch we are also provide everyday recorded sessions with Materials. For more information feel free to contact us : siva@keylabstraining.com. For Course Content and Recorded Demo Click Here : http://www.keylabstraining.com/salesforce-online-training-hyderabad-bangalore
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Java: The Complete Reference, Ninth Edition --- http://amzn.to/1Udwjd0
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • JAVA: The Ultimate Beginner's Guide! --- http://amzn.to/1UI3aVN
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
Aucun téléchargement
Vues
Nombre de vues
4 802
Sur SlideShare
0
Issues des intégrations
0
Intégrations
1 512
Actions
Partages
0
Téléchargements
41
Commentaires
6
J’aime
13
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

×