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

2 646 vues

Publié le

Presented at Devoxx Morocco - Nov. 2015

Publié dans : Logiciels
  • Soyez le premier à commenter

HTTP/2 Comes to Java

  1. 1. HTTP/2  comes  to  Java! David  Delabassee   @delabassee   Oracle Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.   1
  2. 2. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. @delabassee
  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  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 3
  4. 4. 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
  5. 5. 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
  6. 6. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 6 @delabassee Data  Never  Sleeps  2.0 https://www.domo.com/learn/data-­‐never-­‐sleeps-­‐2
  7. 7. 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  
  8. 8. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 8 @delabassee
  9. 9. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 9 @delabassee
  10. 10. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 10 @delabassee
  11. 11. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 11 @delabassee
  12. 12. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 12 @delabassee
  13. 13. 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 .   .   .  
  14. 14. 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  
  15. 15. 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  Rate Time  is  Money! (1)  http://www.fastcompany.com/1825005/how-­‐one-­‐second-­‐could-­‐cost-­‐amazon-­‐16-­‐billion-­‐sales   (2)  RadView  Spring  2015  State  of  the  Union:  Ecommerce  Page  Speed  &  Web  Performance
  16. 16. @delabasseeCopyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. HTTP  1.1 Head-­‐of-­‐Line  blocking 16 Client Server index.html index.html style1.css   script.js   ... style1.css   script.js   ...
  17. 17. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 17 @delabassee HTTP  1.1
  18. 18. 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
  19. 19. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 19 @delabassee File  Concatenation  and  Image  Sprites
  20. 20. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 20 @delabassee HTTP  1.1 Workaround  -­‐  Domain  Sharding
  21. 21. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 21 @delabassee Asset  inlining …   <img  src="data:image/gif;base64,R0lGODlhEAAOexs3eeALMAAOazToeHh0tLS/ 7LZv0jvb29tf3Ubge8WSLrhf3kdbW1mxsjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfGfHy t56HGfGH56ge8WSLf6GGHhfkjfhhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYty GhBKoOjJj6GGHvvhdsbxus38GV3pBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoO jJj6GGHvvhdsbxus38GV3vvhdsbxusbasbPmfyH5BAAAjAAAALAAfhGHhcjAAAAQAA4l sjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnu IoYtyGhBKoOjJj6GGHvvhdsbxus38GV3GfHyt56HGfGH56ge8WsjkhfkjfhGHhcjGDSH JUYgJvhgtyrHgfGfHyt56HGfGH56gebxus38G8WSLf6GGHvvhdsbxusbaSLf6GGHvvhd sbxusbaOiQA4lsjkhfkjf4lsjkhfkjf4lsjbxus38GkhfkjfhfkjfhpBREzxvt6QAA4l sjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3DcPjjBceXsplojj…”  />   …
  22. 22. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 22 @delabassee • HTTP  uses  TCP  poorly   - HTTP:  short  and  bursty  flows  Vs.  TCP:  optimized  for  long-­‐lived  flows   • Solutions   - Sprites   - Domain  sharding   - Assets  Inlining   - File  concatenations   - … HTTP/1.1  circa  1999 Problems  Vs  Solutions 1991   1996   1999   2009   2015   HTTP/0.9   HTTP/1.0   HTTP/1.1   SPDY   HTTP/2.0  
  23. 23. 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
  24. 24. 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”    
  25. 25. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 25 @delabassee Browsers  support …  as  of  Novembre  17  2015 http://caniuse.com/http2  
  26. 26. 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
  27. 27. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 27 @delabassee HTTP/2 • Fully  bi-­‐directional   – Connection
 A  TCP  socket   – Message  
 A  logical  HTTP  message,  such  as  a  request  or  a  response     – Stream
 A  bi-­‐directional  “channel”  within  a  connection,  carry  one  or  more  message   – Frame
 The  smallest  unit  of  communication  in  HTTP/2 Lets  you  do  more  things  with  a  single  TCP  connection
  28. 28. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 28 @delabassee HTTP/2 Connections,  Streams,  Messages,  Frames
  29. 29. @delabasseeCopyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. Binary  Frames • Frames   - HEADERS,  DATA,  PRIORITY,  RST_STREAM,  SETTINGS,  PUSH_PROMISE,  PING,   GOAWAY,  WINDOW_UPDATE,  CONTINUATION   - Prioritisation,  Flow  Control,  Server  Push,  …     • Single  TCP  Connection 29 POST  /upload  HTTP/1.1   Host:  www.test.com   Content-­‐Type:  application/json   Content-­‐Length:  15   {“name”:“duke”} HTTP  1.1 HTTP/2 HEADERS  frame DATA  frame
  30. 30. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 30 @delabassee Length  (24) Type  (8) Flags  (8) R Stream  Identifier  (31) Frame  Payload  (0  …) Binary  Frames
  31. 31. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 31 @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
  32. 32. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 32 @delabassee HTTP/2  Binary  Framing HTTP/1.1  200  OK
 Content-­‐Length:  11
 Content-­‐Type:  text/html
 
 Hello  World Example  2 HEADERS
        -­‐  END_STREAM
        +  END_HEADERS
                :status:  200
                content-­‐length:  11
                content-­‐type:  text/html
 
 DATA
        +  END_STREAM
 Hello  World
  33. 33. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 33 @delabassee Multiplexing
  34. 34. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 34 @delabassee Stream  Prioritization • Stream  Dependency  in  HEADERS  Frame   • PRIORITY  frame  type   • An  additional  40  bytes   - Stream  id  (31)   - Weight  (8):  [1,  256]     - Exclusive  bit  (1)   • Only  an  advice A B C 4 12 A B CD 4 16 12 exclusive  =  0 A B C D 4 12 16 exclusive  =  1
  35. 35. 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!
  36. 36. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 36 @delabassee Header  Compression HPack
  37. 37. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 37 @delabassee Upgrade  from  HTTP  1.1 • HTTP   - Port  80   - HTTP  Upgrade  to  “h2c”  (101  Switching  Protocol)   • HTTPS  (*)   - Application  Layer  Protocol  Negotiation  (ALPN)   - Next  Protocol  Negotiation  (NPN)   (*)  TLS  is  not  mandatory
  38. 38. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 38 @delabassee
  39. 39. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 39 @delabassee
  40. 40. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved.   40
  41. 41. 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
  42. 42. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. @delabassee Java  9  Support  for  HTTP/2 • JEP  110   - http://openjdk.java.net/jeps/110   • Supports  both  HTTP  1.1  and  2   • Easy  to  use  API   • Covers  only  the  most  common  use  cases   • Synchronous  &  Asynchronous 42#HTTP/2
  43. 43. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. @delabassee Java  9 HttpClient  client  =  HttpClient.create()                                                          .sslContext(ctx)                                                          .followRedirects(HttpRedirect.ALWAYS)                                                              .executorService(…)                                                          .build();   HttpRequest.Builder  builder  =  client.request(new  URI(target))                                                                          .body(noBody());   HttpResponse  response  =  builder.GET().send();   //  do  something  with  the  response…   43
  44. 44. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. @delabassee Java  9 //  HttpRequest  builder  from  the  default  HttpClient   HttpResponse  response  =  HttpRequest.create(new  URI("http://www.abc.be"))                                                                        .send(HttpRequest.noBody());   String  responseBody  =  response.body(HttpResponse.asString());   response  =  HttpRequest.create(new  URI("http://www.abc.be"))                                              .body(fromString("param1=Abc"))                                              .post()                                              .send();   … 44
  45. 45. Copyright  ©  2015,  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)  -­‐>  {                                                                      return  response.bodyAsync(asString());                                                      });   String  body  =  compFut.get(5,  TimeUnit.SECONDS);   … 45
  46. 46. 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
  47. 47. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 47 @delabassee • Request/Response  multiplexing   • Binary  Framing   • Stream  Prioritization   • Server  Push   • Header  Compression   • Upgrade  from  HTTP  1.1   – ALPN   – 101  Switching  Protocols HTTP/2
  48. 48. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 48 @delabassee • Request/Response  Multiplexing   • Binary  Framing   • Stream  Prioritization   • Server  Push   • Header  Compression   • Upgrade  from  HTTP  1.1   – ALPN   – 101  Switching  Protocols Features  to  be  Exposed  in  the  Servlet  API Servlet  4
  49. 49. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 49 @delabassee • Push  resource  to  client  for  a  given  url  and  headers   • May  add  callback  for  completion  or  error  of  a  push   • Not  a  replacement  for  WebSocket Servlet  4.0  -­‐  Server  Push
  50. 50. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. PushBuilder  builder = baseRequest.getPushBuilder(); builder.addHeader(“X-Pusher", …); builder.path(aResource) .etag(associated._etag) .lastModified(associated._lastModified) .push(); 50 Server  Push
  51. 51. 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
  52. 52. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. @delabassee HTTP/2 • Address  the  Limitations  of  HTTP  1.x   - Improve  ressources  utilization,  performance,  reduce  latency   • “Compatible”  with  HTTP  1.1   - Retain  HTTP  1.1  semantics   - Define  interaction  with  HTTP  1.1   - Undo  your  HTTP  1.1  tricks!!   • “TLS  not  mandatory” 52 Hypertext  Transfer  Protocol  version  2  &  HPACK
  53. 53. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. @delabassee HTTP/2  and  Java • JEP  110  brings  HTTP/2  to  Java  SE   • Servlet  4.0  brings  HTTP/2  to  Java  EE   - Expose  key  features  to  the  API   • Server  Push   • Stream  Prioritization   • HTTP  1.1  upgrade   • Timing  TBC! 53 Plans
  54. 54. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. @delabassee#HTTP/2 54  ‫ﺍ‬‫ﺷﻜﺮ‬
  55. 55. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. @delabassee#HTTP/2 Resources  (and  credits) • http://http2.github.io   • http://chimera.labs.oreilly.com/books/1230000000545/ch12.html   • https://java.net/projects/servlet-­‐spec/   • http://glassfish.org/adoptajsr   • http://openjdk.java.net/jeps/110 55
  56. 56. Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 56

×