More Related Content
Similar to JavaCro'15 - HTTP2 Comes to Java! - David Delabassee
Similar to JavaCro'15 - HTTP2 Comes to Java! - David Delabassee (20)
More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)
JavaCro'15 - HTTP2 Comes to Java! - David Delabassee
- 1. HTTP/2
Comes
to
Java
David
Delabassee
(@delabassee)
Oracle
Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
- 2. 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. 2
- 3. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Agenda
Java
EE
8
Why
HTTP/2?
HTTP/2
Big
Features
HTTP/2
and
Java
EE
HTTP/2
and
Java
SE
Summary
3
- 4. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Agenda
Java
EE
8
Why
HTTP/2?
HTTP/2
Big
Features
HTTP/2
and
Java
EE
HTTP/2
and
Java
SE
Summary
4
- 5. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Java
EE
8
-‐
HTML5
Support
/
Web
Tier
Enhancements
• JSON
Binding
• JSON
Processing
enhancements
• Server-‐sent
events
• Action-‐based
MVC
• HTTP/2
support
5
- 6. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Agenda
Java
EE
8
Why
HTTP/2?
HTTP/2
Big
Features
HTTP/2
and
Java
EE
HTTP/2
and
Java
SE
Summary
6
- 7. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 7
HTTP
1.x
1991
1996
1999
2009
2015
HTTP/0.9
HTTP/1.0
HTTP/1.1
SPDY
HTTP/2.0
- 8. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 8
Back
then…
8
- 9. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 9
Today
index.html
style1.css
style2.css
.
.
.
script1.js
script9.js
pic1.jpg
pic8.jpg
.
.
.
photo1.png
photo2.png
.
.
.
- 10. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 10
• “Conversion
Rate”
Vs.
Latency
- If
a
page
takes
longer
than
4
sec
to
load,
1/4
people
abandons
that
page
- Page
load
slowdown
of
1
sec
could
cost
Amazon
$1.6
billion
in
sales
each
year
- Slowing
search
results
by
just
0.4
sec,
Google
could
lose
8
million
searches
per
day
(http://www.fastcompany.com/1825005/how-‐one-‐second-‐could-‐cost-‐amazon-‐16-‐billion-‐sales)
10
Time
is
Money!
- 11. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 11
google.fr
(1st)
• 3
HTTP
Requests
• 21.355
bytes
- 1
HTML
- 1
image
- 1
.js
11
Top
.FR
examples
lefigaro.fr
(15th)
• 140
HTTP
Requests
• 2.736.562
bytes
- 1
HTML
- 130
images
- 6
.js
- 2
.css
- 12. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
HTTP
1.1
Head-‐of-‐Line
blocking
12
Client Server
index.html
index.html
style1.css
style2.css
script1.js
...
style1.css
style2.css
script1.js
...
- 14. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 14
File
Concatenation
and
Image
Sprites
14
• 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
- 15. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 15
File
Concatenation
and
Image
Sprites
15
- 16. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 16
HTTP
1.1
Workaround
-‐
Domain
Sharding
16
- 17. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 17
Asset
inlining
…
<img
src="data:image/gif;base64,R0lGODlhEAAOexs3eeALMAAOazToeHh0tLS/
7LZv0jvb29tf3Ubge8WSLrhf3kdbW1mxsjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfGfHy
t56HGfGH56ge8WSLf6GGHhfkjfhhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYty
GhBKoOjJj6GGHvvhdsbxus38GV3pBREzxvt6QAA4lsjkhfkjfhdxwqBnuIoYtyGhBKoO
jJj6GGHvvhdsbxus38GV3vvhdsbxusbasbPmfyH5BAAAjAAAALAAfhGHhcjAAAAQAA4l
sjkhfkjfhGHhcjGDSHJUYgJvhgtyrHgfhfkjfhpBREzxvt6QAA4lsjkhfkjfhdxwqBnu
IoYtyGhBKoOjJj6GGHvvhdsbxus38GV3GfHyt56HGfGH56ge8WsjkhfkjfhGHhcjGDSH
JUYgJvhgtyrHgfGfHyt56HGfGH56gebxus38G8WSLf6GGHvvhdsbxusbaSLf6GGHvvhd
sbxusbaOiQA4lsjkhfkjf4lsjkhfkjf4lsjbxus38GkhfkjfhfkjfhpBREzxvt6QAA4l
sjkhfkjfhdxwqBnuIoYtyGhBKoOjJj6GGHvvhdsbxus38GV3DcPjjBceXsplojj…”
/>
…
- 18. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 18
• HTTP
uses
TCP
poorly
- HTTP:
short
and
bursty
flows
Vs.
TCP:
optimized
for
long-‐lived
flows
• Solutions
- Sprites
- Domain
sharding
- Assets
Inlining
- File
concatenations
- …
18
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
- 19. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Agenda
Java
EE
8
Why
HTTP/2?
HTTP/2
Big
Features
HTTP/2
and
Java
EE
HTTP/2
and
Java
SE
Summary
19
- 20. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 20
HTTP/2
Features
• Binary
Framing
over
single
TCP
connection
• Request/Response
multiplexing
• Stream
Prioritization
• Server
Push
• Upgrade
from
HTTP
1.1
• Header
Compression
- 21. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 21
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
21
Lets
you
do
more
things
with
a
single
TCP
connection
- 22. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 22
HTTP/2
22
Connections,
Streams,
Messages,
Frames
- 23. Copyright
©
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
23
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
- 24. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 24
Multiplexing
24
- 25. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 25
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
25
A
B C
4 12
A
B CD
4 16 12
exclusive
=
0
A
B C
D
4 12
16
exclusive
=
1
- 26. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Server
Push
/index.html
stream
1
/style.css
stream
2
/script.js
stream
4
Client Server
stream
1
HEADERS
stream
1
DATA
stream
2
PROMISE
stream
4
PROMISE
26
• No
corresponding
JavaScript
API
• Can
be
combined
with
SSE
- 27. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 27
Header
Compression
27
HPack
- 28. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 28
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
28
- 29. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Agenda
Java
EE
8
Why
HTTP/2?
HTTP/2
Big
Features
HTTP/2
and
Java
EE
HTTP/2
and
Java
SE
Summary
29
- 30. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 30
• Request/Response
multiplexing
• Binary
Framing
• Stream
Prioritization
• Server
Push
• Header
Compression
• Upgrade
from
HTTP
1.1
– ALPN
or
(NPN)
– 101
Switching
Protocols
30
HTTP/2
- 31. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 31
• Request/Response
Multiplexing
• Binary
Framing
• Stream
Prioritization
• Server
Push
• Header
Compression
• Upgrade
from
HTTP
1.1
– ALPN
or
(NPN)
– 101
Switching
Protocols
31
Features
Potentially
Exposed
in
Servlet
API
HTTP/2
- 32. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 32
• New
HttpServletRequest
and
HttpServletResponse
method
– int
getStreamId()
32
Stream
Prioritization
- 33. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 33
• New
class
Priority
– boolean
exclusive
– int
streamId
– int
weight
• New
method
to
HttpServletRequest
– Priority
getPriority()
• New
methods
to
HttpServletResponse
– Priority
getPriority()
– void
setPriority(Priority
p)
33
Stream
Prioritization
- 34. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 34
• 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
34
Servlet
4.0
Server
Push
- 35. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 35
Server
Push
public
class
ExternalContextImpl
extends
ExternalContext
{
//…
public
String
encodeResourceURL(String
url)
{
if
(null
==
url)
{
String
message
=
MessageUtils.getExceptionMessageString
(MessageUtils.NULL_PARAMETERS_ERROR_MESSAGE_ID,
"url");
throw
new
NullPointerException(message);
}
Map
attrs
=
getResourceAttrs();
((HttpServletRequest)
request).dispatchPushRequest(url,
attrs);
return
((HttpServletResponse)
response).encodeURL(url);
}
//…
}
Example
of
Potential
Use
from
JSF
35
- 36. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Agenda
Java
EE
8
Why
HTTP/2?
HTTP/2
Big
Features
HTTP/2
and
Java
EE
HTTP/2
and
Java
SE
Summary
36
- 37. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Java
SE
9
Support
for
HTTP/2
• JEP
110
- http://openjdk.java.net/jeps/110
• Easy
to
use
API
• Covers
only
the
most
common
use
cases
• Supports
both
HTTP
1.1
and
2
37
- 38. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved. 38
Java
SE
9
Support
for
HTTP/2
• 2
classes
– HttpRequest
:
one
request/response
interaction
– HttpRequestGroup
:
configuration
for
multiple
requests
• Blocking
mode:
one
thread
per
request/response
– send
request
&
get
response
• Non-‐blocking
mode:
handle
multiple
request/response
interactions
in
single
thread
using
non-‐blocking
API
– analogous
to
NIO
selectors
Small
footprint
38
- 39. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Java
SE
9
Support
for
HTTP/2
HttpRequestGroup
group
=
HttpRequestGroup.create();
HttpRequest
req
=
group.createRequest()
.setRequestMethod("POST")
.setRequestURI(new
URI("http://www.foo.com/a/b")
.setRequestBody("Param1=1,Param2=2")
.onResponseHeader("X-‐Foo",
(request,
name,
value)
-‐>
{
System.out.printf("
received
an
X-‐Foo
header");
})
.sendRequest()
.waitForCompletion();
39
- 40. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Java
SE
9
Support
for
HTTP/2
HttpRequestGroup
group
=
HttpRequestGroup.create();
HttpRequest
req
=
group.createRequest()
…
.onResponseBody((HttpRequest
request,
InputStream
in)
-‐>
{
if
(request.getResponseCode()
==
200)
{
Path
out
=
Paths.get("/tmp/out");
try
{
Files.copy(in,
out);
}
finally
{
in.close();
}
}
})
.sendRequest()
.waitForCompletion();
40
- 41. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Agenda
Java
EE
8
Why
HTTP/2?
HTTP/2
Big
Features
HTTP/2
and
Java
EE
HTTP/2
and
Java
SE
Summary
41
- 42. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
HTTP/2
• Address
the
Limitations
of
HTTP
1.x
- Improve
performance
- Reduce
latency
- Improve
ressources
utilization,
etc.
• “Compatible
with
HTTP/1.1”
- Retain
semantics
of
HTTP
1.x
- Define
interaction
with
HTTP
1.1
• “TLS
not
mandatory”
42
Hypertext
Transfer
Protocol
version
2
&
HPACK
- 43. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
“HTTP/2
is
nearly
done
standardization”
• Jan
2015
Enabled
by
default
in
FireFox
(35)
and
Chrome
(40)
• Feb
2015
IESG
approved
HTTP/2
• May
2015
HTTP/2
in
10%
of
all
HTTP
responses
(FireFox)
(*)
HTTP/2
used
in
18%
of
global
traffic
(Google)
(*)
HTTP/2
is
supported
by
44%
of
browsers
in
user
right
now
(*)
In
RFC
Editor’s
publication
queue
(*)
http://daniel.haxx.se/blog/2015/05/07/http2-‐for-‐tcpip-‐geeks/
43
- 44. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
HTTP/2
and
Java
• Servlet
4.0
brings
HTTP/2
to
Java
EE
- 100%
compliant
implementation
of
HTTP/2
- Expose
key
features
to
the
API
• Server
Push
• Stream
Prioritization
• HTTP
1.1
upgrade
• JDK
9
brings
HTTP/2
support
to
Java
SE
• TBC!
44
Plans
- 45. Copyright
©
2015,
Oracle
and/or
its
affiliates.
All
rights
reserved.
Resources
• https://java.net/projects/servlet-‐spec/
• http://glassfish.org/adoptajsr
• http://openjdk.java.net/jeps/110
• http://http2.github.io
• http://chimera.labs.oreilly.com/books/1230000000545/ch12.html
45