http/2 comes to java

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

Upload: david-delabassee

Post on 14-Feb-2017

2.089 views

Category:

Software


0 download

TRANSCRIPT

Page 1: HTTP/2 Comes to Java

HTTP/2  comes  to  Java!

David  Delabassee  @delabassee  Oracle

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

1

Page 2: HTTP/2 Comes to Java

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

Page 3: HTTP/2 Comes to Java

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

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

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

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

Page 7: HTTP/2 Comes to Java

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

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

Page 9: HTTP/2 Comes to Java

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

Page 10: HTTP/2 Comes to Java

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

Page 11: HTTP/2 Comes to Java

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

Page 12: HTTP/2 Comes to Java

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

Page 13: HTTP/2 Comes to Java

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 14: HTTP/2 Comes to Java

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 15: HTTP/2 Comes to Java

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/how-­‐one-­‐second-­‐could-­‐cost-­‐amazon-­‐16-­‐billion-­‐sales  (2)  RadView  Spring  2015  State  of  the  Union:  Ecommerce  Page  Speed  &  Web  Performance

Page 16: HTTP/2 Comes to Java

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

HTTP  1.1Head-­‐of-­‐Line  blocking

16

Client Server

index.htmlindex.html

style1.css  script.js  

...style1.css  script.js  

...

Page 17: HTTP/2 Comes to Java

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

HTTP  1.1

Page 18: HTTP/2 Comes to Java

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 19: HTTP/2 Comes to Java

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

File  Concatenation  and  Image  Sprites

Page 20: HTTP/2 Comes to Java

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

HTTP  1.1Workaround  -­‐  Domain  Sharding

Page 21: HTTP/2 Comes to Java

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

Asset  inlining

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

Page 22: HTTP/2 Comes to Java

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  1999Problems  Vs  Solutions

1991   1996   1999   2009   2015  

HTTP/0.9  HTTP/1.0  

HTTP/1.1  SPDY  

HTTP/2.0  

Page 23: HTTP/2 Comes to Java

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 24: HTTP/2 Comes to Java

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 25: HTTP/2 Comes to Java

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

Browsers  support…  as  of  Novembre  17  2015

http://caniuse.com/http2  

Page 26: HTTP/2 Comes to Java

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

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

HTTP/2

• Fully  bi-­‐directional  – ConnectionA  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  – 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

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

HTTP/2Connections,  Streams,  Messages,  Frames

Page 29: HTTP/2 Comes to Java

@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

Page 30: HTTP/2 Comes to Java

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

Page 31: HTTP/2 Comes to Java

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. 31 @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 32: HTTP/2 Comes to Java

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

HTTP/2  Binary  Framing

HTTP/1.1  200  OKContent-­‐Length:  11Content-­‐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

Page 33: HTTP/2 Comes to Java

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

Multiplexing

Page 34: HTTP/2 Comes to Java

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

Page 35: HTTP/2 Comes to Java

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 36: HTTP/2 Comes to Java

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

Header  CompressionHPack

Page 37: HTTP/2 Comes to Java

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

Page 38: HTTP/2 Comes to Java

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

Page 39: HTTP/2 Comes to Java

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

Page 40: HTTP/2 Comes to Java

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

Page 41: HTTP/2 Comes to Java

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 42: HTTP/2 Comes to Java

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

Page 43: HTTP/2 Comes to Java

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

Page 44: HTTP/2 Comes to Java

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

Page 45: HTTP/2 Comes to Java

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

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

45

Page 46: HTTP/2 Comes to Java

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 47: HTTP/2 Comes to Java

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

Page 48: HTTP/2 Comes to Java

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

Page 49: HTTP/2 Comes to Java

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

Page 50: HTTP/2 Comes to Java

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

Page 51: HTTP/2 Comes to Java

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 52: HTTP/2 Comes to Java

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

Page 53: HTTP/2 Comes to Java

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

Page 54: HTTP/2 Comes to Java

Copyright  ©  2015,  Oracle  and/or  its  affiliates.  All  rights  reserved. @delabassee#HTTP/2 54

شكرا 

Page 55: HTTP/2 Comes to Java

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

Page 56: HTTP/2 Comes to Java

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