SlideShare a Scribd company logo
1 of 36
Download to read offline
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 1/36
Intro to HTTP/2
Brought to you by Boshan Sun
1
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 2/36
History of HTTP
• HTTP/0.9, 1991
• HTTP/1.0, 1996, RFC 1945
• HTTP/1.1, 1999, RFC 2616, RFC 7230-7235
• HTTP/2, 2015, RFC 7540/7541
Related protocols
• Gopher, 1991
• SPDY, 2012
2
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 3/36
HTTP/1.1
client <----------------------> server
GET / HTTP/1.1 HTTP/1.1 200 OK
Host: example.com Content-Length: 1270
<!doctype html>
<html>
...
</html>
3
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 4/36
HTTP/1.1
➜ telnet example.com 80
Trying 93.184.216.34...
Connected to example.com.
Escape character is '^]'.
GET / HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Content-Length: 1270
<!doctype html>
<html>
...
</html>
4
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 5/36
Problems of HTTP/1.1
• TCP is not fully utilized
• head of line blocking
• too many request to render even for one page
5
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 6/36
Problems of HTTP/1.1
client server
| GET / |
| -----------------------------> |
| 200 OK |
| <----------------------------- |
| |
| GET /favicon |
| -----------------------------> |
| 200 OK |
| <----------------------------- |
| |
| GET /index.js |
| -----------------------------> |
| 200 OK |
| <----------------------------- |
| |
| ... |
| |
| GET /title.png |
| -----------------------------> |
| 200 OK |
| <----------------------------- |
6
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 7/36
Workarounds
• spriting: use a large image
• inlining: put image inline
• concatenation: put few js in one
• sharding: connect to multiple servers
7
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 8/36
HTTP/2 design goal
• support url http:// & https://
• support proxy from http 1.x to http2
• no minor version number
8
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 9/36
HTTP/2
• RFC 7540 - HTTP version 2
• RFC 7541 - HPACK: Header Compression for HTTP/2
9
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 10/36
HTTP/2 features
• one TCP connection
• binary protocol
• multiplexing
• flow control and prioritization
• header compression
• server push
10
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 11/36
Upgrade to HTTP/2
• Upgrade to https URI
• Application Layer Protocol Negotiation(ALPN)
• A connection preface
PRI * HTTP/2.0
SM
11
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 12/36
Frames
+-----------------------------------------------+
| Length (24) |
+---------------+---------------+---------------+
| Type (8) | Flags (8) |
+-+-------------+---------------+-------------------------------+
|R| Stream Identifier (31) |
+=+=============================================================+
| Frame Payload (0...) ...
+---------------------------------------------------------------+
12
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 13/36
Types
+---------------+------+
| Frame Type | Code |
+---------------+------+
| DATA | 0x0 |
| HEADERS | 0x1 | <- headers
| PRIORITY | 0x2 |
| RST_STREAM | 0x3 |
| SETTINGS | 0x4 | <- settings
| PUSH_PROMISE | 0x5 |
| PING | 0x6 |
| GOAWAY | 0x7 |
| WINDOW_UPDATE | 0x8 |
| CONTINUATION | 0x9 |
+---------------+------+
13
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 14/36
Settings
+-------------------------------+
| Identifier (16) |
+-------------------------------+-------------------------------+
| Value (32) |
+---------------------------------------------------------------+
+------------------------+------+---------------+
| Name | Code | Initial Value |
+------------------------+------+---------------+
| HEADER_TABLE_SIZE | 0x1 | 4096 |
| ENABLE_PUSH | 0x2 | 1 |
| MAX_CONCURRENT_STREAMS | 0x3 | (infinite) |
| INITIAL_WINDOW_SIZE | 0x4 | 65535 |
| MAX_FRAME_SIZE | 0x5 | 16384 |
| MAX_HEADER_LIST_SIZE | 0x6 | (infinite) |
+------------------------+------+---------------+
14
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 15/36
Settings
+-----------------------------------------------+
| Length (24) |
+---------------+---------------+---------------+
| Type (8) | Flags (8) |
+-+-------------+---------------+-------------------------------+
|R| Stream Identifier (31) |
+=+=============================================================+
| Identifier (16) |
+-------------------------------+-------------------------------+
| Value (32) |
+---------------------------------------------------------------+
<<0,0,24,4,0,0,0,0,0,0,5,0,16,0,0,0,3,0,0,0,250,0,6,0,16,1,64,0,4,0,16,0,0>>
0,0,24, % length(24)
4,0, % type(SETTINGS), flags(0)
0,0,0,0, % stream id(0)
0,5, % MAX_FRAME_SIZE(1048576)
0,16,0,0,
0,3, % MAX_CONCURRENT_STREAMS(250)
0,0,0,250,
0,6, % MAX_HEADER_LIST_SIZE(1048896)
0,16,1,64,
0,4, % INITIAL_WINDOW_SIZE(1048576)
0,16,0,0
+-----------------------------------------------+
15
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 16/36
Headers
+-----------------------------------------------+
| Length (24) |
+---------------+---------------+---------------+
| Type (8) | Flags (8) |
+-+-------------+---------------+-------------------------------+
|R| Stream Identifier (31) |
+=+=============================================================+
|Pad Length? (8)|
+-+-------------+-----------------------------------------------+
|E| Stream Dependency? (31) |
+-+-------------+-----------------------------------------------+
| Weight? (8) |
+-+-------------+-----------------------------------------------+
| Header Block Fragment (*) ...
+---------------------------------------------------------------+
| Padding (*) ...
+---------------------------------------------------------------+
16
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 17/36
HPACK: Header Compression for HTTP/2
• RFC 7541
➜ curl -v http://example.com
GET / HTTP/1.1
Host: example.com
User-Agent: curl/7.54.0
Accept: */*
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Mon, 19 Nov 2018 22:31:57 GMT
...
17
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 18/36
Static Table
+-------+-----------------------------+---------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+---------------+
| 1 | :authority | | <- host: example.com
| 2 | :method | GET | <- GET
| 3 | :method | POST |
| 4 | :path | / |
| 5 | :path | /index.html |
| 6 | :scheme | http |
| 7 | :scheme | https |
| 8 | :status | 200 |
| 9 | :status | 204 |
| 10 | :status | 206 |
| 11 | :status | 304 |
| 12 | :status | 400 |
| 13 | :status | 404 |
| 14 | :status | 500 |
| 15 | accept-charset | |
| 16 | accept-encoding | gzip, deflate |
| 17 | accept-language | |
| 18 | accept-ranges | |
| 19 | accept | |
| ... | | |
| 61 | www-authenticate | |
+-------+-----------------------------+---------------+
18
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 19/36
Dynamic Table
+-------+-----------------------------+---------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+---------------+
| 62 | x-user-name | hellokitty |
| 63 | x-password | password123 |
| ... | | |
+-------+-----------------------------+---------------+
19
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 20/36
Our header
GET / HTTP/1.1
Host: http2.golang.org
:method: GET
:scheme: https
:path: /
:authority: http2.golang.org
+-------+-----------------------------+------------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+------------------+
| 1 | :authority | | http2.golang.org
| 2 | :method | GET |
| 4 | :path | / |
| 7 | :scheme | https |
+-------+-----------------------------+------------------+
20
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 21/36
How to represent a interger?
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| |
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| 0 0 0 0 0 0 0 0 | 0
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| 1 1 1 1 1 1 1 1 | 255
+---+---------------------------+
21
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 22/36
Variable-length integer
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| ? | ? | ? | value |
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| ? | ? | ? | 0 0 0 0 0 | 0
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| ? | ? | ? | 1 1 1 1 0 | 30
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| ? | ? | ? | 1 1 1 1 1 |
+---+---+---+-------------------+
| 0 | 0 | 0 + 31 = 31
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| ? | ? | ? | 1 1 1 1 1 |
+---+---+---+-------------------+
| 0 | 1 | 1 + 31 = 32
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| ? | ? | ? | 1 1 1 1 1 |
22
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 23/36
String literal
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| H | String Length (7+) |
+---+---------------------------+
| String Data (Length octets) |
+-------------------------------+
""
+---+---+---+---+---+---+---+---+
| 0 | 0 0 0 0 0 0 0 | 0
+---+---------------------------+
"abc"
+---+---+---+---+---+---+---+---+
| 0 | 0 0 0 0 0 1 1 | 3
+---+---------------------------+
| 0 1 1 0 0 0 0 1 | 97(a)
+-------------------------------+
| 0 1 1 0 0 0 1 0 | 98(b)
+-------------------------------+
| 0 1 1 0 0 0 1 1 | 99(c)
+-------------------------------+
"你好"
+---+---+---+---+---+---+---+---+
| 0 | 0 0 0 0 1 1 0 | 6
+---+---------------------------+
23
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 24/36
Indexed Header Field
+-------+-----------------------------+------------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+------------------+
| 1 | :authority | | http2.golang.org
| 2 | :method | GET |
| 4 | :path | / |
| 7 | :scheme | https |
+-------+-----------------------------+------------------+
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 1 | Index (7+) |
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| 1 | 0 0 0 0 0 1 0 | 130
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| 1 | 0 0 0 0 1 0 0 | 132
+---+---------------------------+
+---+---+---+---+---+---+---+---+
| 1 | 0 0 0 0 1 1 1 | 135
+---+---------------------------+
24
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 25/36
Literal Header Field
• Literal Header Field with Incremental Indexing
• Literal Header Field without Indexing
• Literal Header Field Never Indexed
25
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 26/36
Dynamic Table
+-------+-----------------------------+---------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+---------------+
+-------+-----------------------------+---------------+
:method: GET
:scheme: http
:path: /
:authority: example.com
+-------+-----------------------------+---------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+---------------+
| 62 | :authority | example.com |
+-------+-----------------------------+---------------+
:method: GET
:scheme: http
:path: /
:authority: example.com
cache-control: no-cache
+-------+-----------------------------+---------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+---------------+
| 62 | cache-control | no-cache |
| 63 | :authority | example.com |
26
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 27/36
Literal Header Field with Incremental Indexing
indexed name
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 0 | 1 | Index (6+) |
+---+---+-----------------------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
+-------------------------------+
new name
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 |
+---+---+-----------------------+
| H | Name Length (7+) |
+---+---------------------------+
| Name String (Length octets) |
+---+---------------------------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
+-------------------------------+
27
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 28/36
Literal Header Field with Incremental Indexing
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 0 | 1 | Index (6+) |
+---+---+-----------------------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
+-------------------------------+
+-------+-----------------------------+------------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+------------------+
| 1 | :authority | | http2.golang.org
+-------+-----------------------------+------------------+
+---+---+---+---+---+---+---+---+
| 0 | 1 | 0 0 0 0 0 1 | 65
+---+---+-----------------------+
| 0 | 0 0 1 0 0 0 0 | 16
+---+---------------------------+
| 0 1 1 0 1 0 0 0 | 104(h)
+-------------------------------+
| 0 1 1 1 0 1 0 0 | 116(t)
+-------------------------------+
| 0 1 1 1 0 1 0 0 | 116(t)
+-------------------------------+
| 0 1 1 1 0 0 0 0 | 112(p)
28
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 29/36
Literal Header Field without Indexing
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | Index (4+) |
+---+---+-----------------------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
+-------------------------------+
+-------+-----------------------------+------------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+------------------+
| 1 | :authority | | http2.golang.org
+-------+-----------------------------+------------------+
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 0 | 0 0 0 1 | 1
+---+---+-----------------------+
| 0 | 0 0 1 0 0 0 0 | 16
+---+---------------------------+
| 0 1 1 0 1 0 0 0 | 104(h)
+-------------------------------+
| 0 1 1 1 0 1 0 0 | 116(t)
+-------------------------------+
| 0 1 1 1 0 1 0 0 | 116(t)
+-------------------------------+
| 0 1 1 1 0 0 0 0 | 112(p)
29
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 30/36
Literal Header Field never Indexing
0 1 2 3 4 5 6 7
+---+---+---+---+---+---+---+---+
| 0 | 0 | 0 | 1 | Index (4+) |
+---+---+-----------------------+
| H | Value Length (7+) |
+---+---------------------------+
| Value String (Length octets) |
+-------------------------------+
30
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 31/36
HPACK in action
:method: GET
:scheme: https
:path: /
:authority: http2.golang.org
+-------+-----------------------------+------------------+
| Index | Header Name | Header Value |
+-------+-----------------------------+------------------+
| 1 | :authority | | http2.golang.org
| 2 | :method | GET |
| 4 | :path | / |
| 7 | :scheme | https |
+-------+-----------------------------+------------------+
<<130>>
<<135>>
<<132>>
<<65,16,104,116,116,112,50,46,103,111,108,97,110,103,46,111,114,103>>
31
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 32/36
Headers
+-----------------------------------------------+
| Length (24) |
+---------------+---------------+---------------+
| Type (8) | Flags (8) |
+-+-------------+---------------+-------------------------------+
|R| Stream Identifier (31) |
+=+=============================================================+
| Header Block Fragment (*) ...
+---------------------------------------------------------------+
+-----------------------------------------------+
|0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1| (21)
+---------------+---------------+---------------+
|0 0 0 0 0 0 0 1|0 0 0 0 1 0 0 1| (END_HEADERS & END_STREAM)
+-+-------------+---------------+---------------+---------------+
|0|0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1| (stream id 1)
+=+=============================================================+
|1 0 0 0 0 0 1 0|1 0 0 0 0 1 1 1|1 0 0 0 0 1 0 0|
+-----------------------------------------------+
...
0,0,21, % length(21)
1,5, % type(HEADERS), flags(END_HEADERS & END_STREAM)
0,0,0,1, % stream id(1)
130,135,132, % header block fragment
65,16,104,116,116,112,50,46,103,111,108,97,110,103,46,111,114,103
32
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 33/36
a simple http2 client
https://github.com/sunboshan/h2
-module(http2).
-export([start/0,init/0]).
start() ->
spawn(http2,init,[]).
init() ->
{ok,Socket} = ssl:connect("http2.golang.org",443,[
binary,
{alpn_advertised_protocols,[<<"h2">>]}
]),
Magic = "PRI * HTTP/2.0rnrnSMrnrn",
Settings = <<0,0,0,4,0,0,0,0,0>>,
ssl:send(Socket,[Magic,Settings]),
loop(Socket).
loop(Socket) ->
receive
{ssl,Socket,Data} ->
parse(Data),
loop(Socket);
{send,Data} ->
ssl:send(Socket,Data),
33
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 34/36
a simple http2 client
➜ erl -s ssl
1> c(http2),P=http2:start().
<0.108.0>
2> P ! {send,<<0,0,21,1,5,0,0,0,3,130,135,132,65,16,104,116,116,112,50,46,103,111,108,97,110,103,46,111,114,103>>}.
{send,<<0,0,21,1,5,0,0,0,3,130,135,132,1,16,104,116,116,
112,50,46,103,111,108,97,110,103,46,...>>}
<html>
<body>
<h1>Go + HTTP/2</h1>
<p>Welcome to <a href="https://golang.org/">the Go language</a>'s <a
href="https://http2.github.io/">HTTP/2</a> demo & interop server.</p>
<p>Congratulations, <b>you're using HTTP/2 right now</b>.</p>
...
</body></html>
34
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 35/36
HTTP/3
• HTTP-over-QUIC
• Coming in 2019… maybe
35
12/18/2018 Intro to HTTP/2
http://127.0.0.1:8888/backend/abb7-http2.html 36/36
36

More Related Content

What's hot

I want the next generation web here SPDY QUIC
I want the next generation web here SPDY QUICI want the next generation web here SPDY QUIC
I want the next generation web here SPDY QUICSource Conference
 
HTTP2:新的机遇与挑战
HTTP2:新的机遇与挑战HTTP2:新的机遇与挑战
HTTP2:新的机遇与挑战Jerry Qu
 
Kea DHCP – the new open source DHCP server from ISC
Kea DHCP – the new open source DHCP server from ISCKea DHCP – the new open source DHCP server from ISC
Kea DHCP – the new open source DHCP server from ISCMen and Mice
 
Stuart Larsen, attacking http2implementations-rev1
Stuart Larsen, attacking http2implementations-rev1Stuart Larsen, attacking http2implementations-rev1
Stuart Larsen, attacking http2implementations-rev1PacSecJP
 
Attacking http2 implementations (1)
Attacking http2 implementations (1)Attacking http2 implementations (1)
Attacking http2 implementations (1)John Villamil
 
Debugging the Cloud Foundry Routing Tier
Debugging the Cloud Foundry Routing TierDebugging the Cloud Foundry Routing Tier
Debugging the Cloud Foundry Routing TierVMware Tanzu
 
HTTP/2 Introduction
HTTP/2 IntroductionHTTP/2 Introduction
HTTP/2 IntroductionWalter Liu
 
HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30Jxck Jxck
 
What is new in BIND 9.11?
What is new in BIND 9.11?What is new in BIND 9.11?
What is new in BIND 9.11?Men and Mice
 
SPDY - http reloaded - WebTechConference 2012
SPDY - http reloaded - WebTechConference 2012SPDY - http reloaded - WebTechConference 2012
SPDY - http reloaded - WebTechConference 2012Fabian Lange
 
Delivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXDelivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXNGINX, Inc.
 
RIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinarRIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinarMen and Mice
 
Technical Overview of QUIC
Technical  Overview of QUICTechnical  Overview of QUIC
Technical Overview of QUICshigeki_ohtsu
 
An Introduction to BGP Flow Spec
An Introduction to BGP Flow SpecAn Introduction to BGP Flow Spec
An Introduction to BGP Flow SpecShortestPathFirst
 
DNS High-Availability Tools - Open-Source Load Balancing Solutions
DNS High-Availability Tools - Open-Source Load Balancing SolutionsDNS High-Availability Tools - Open-Source Load Balancing Solutions
DNS High-Availability Tools - Open-Source Load Balancing SolutionsMen and Mice
 

What's hot (20)

Observability with HAProxy
Observability with HAProxyObservability with HAProxy
Observability with HAProxy
 
I want the next generation web here SPDY QUIC
I want the next generation web here SPDY QUICI want the next generation web here SPDY QUIC
I want the next generation web here SPDY QUIC
 
What's New in HAProxy
What's New in HAProxyWhat's New in HAProxy
What's New in HAProxy
 
HTTP2:新的机遇与挑战
HTTP2:新的机遇与挑战HTTP2:新的机遇与挑战
HTTP2:新的机遇与挑战
 
Kea DHCP – the new open source DHCP server from ISC
Kea DHCP – the new open source DHCP server from ISCKea DHCP – the new open source DHCP server from ISC
Kea DHCP – the new open source DHCP server from ISC
 
Stuart Larsen, attacking http2implementations-rev1
Stuart Larsen, attacking http2implementations-rev1Stuart Larsen, attacking http2implementations-rev1
Stuart Larsen, attacking http2implementations-rev1
 
Attacking http2 implementations (1)
Attacking http2 implementations (1)Attacking http2 implementations (1)
Attacking http2 implementations (1)
 
Debugging the Cloud Foundry Routing Tier
Debugging the Cloud Foundry Routing TierDebugging the Cloud Foundry Routing Tier
Debugging the Cloud Foundry Routing Tier
 
HTTP/2 Introduction
HTTP/2 IntroductionHTTP/2 Introduction
HTTP/2 Introduction
 
Prezentacja zimowisko 2014
Prezentacja zimowisko 2014Prezentacja zimowisko 2014
Prezentacja zimowisko 2014
 
Grpc present
Grpc presentGrpc present
Grpc present
 
HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30
 
What is new in BIND 9.11?
What is new in BIND 9.11?What is new in BIND 9.11?
What is new in BIND 9.11?
 
SPDY - http reloaded - WebTechConference 2012
SPDY - http reloaded - WebTechConference 2012SPDY - http reloaded - WebTechConference 2012
SPDY - http reloaded - WebTechConference 2012
 
Delivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXDelivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINX
 
Route Origin Validation - A MANRS Approach
Route Origin Validation - A MANRS ApproachRoute Origin Validation - A MANRS Approach
Route Origin Validation - A MANRS Approach
 
RIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinarRIPE 71 and IETF 94 reports webinar
RIPE 71 and IETF 94 reports webinar
 
Technical Overview of QUIC
Technical  Overview of QUICTechnical  Overview of QUIC
Technical Overview of QUIC
 
An Introduction to BGP Flow Spec
An Introduction to BGP Flow SpecAn Introduction to BGP Flow Spec
An Introduction to BGP Flow Spec
 
DNS High-Availability Tools - Open-Source Load Balancing Solutions
DNS High-Availability Tools - Open-Source Load Balancing SolutionsDNS High-Availability Tools - Open-Source Load Balancing Solutions
DNS High-Availability Tools - Open-Source Load Balancing Solutions
 

Similar to Introduction to HTTP/2 and How To Use It

Introduction to WebSockets
Introduction to WebSocketsIntroduction to WebSockets
Introduction to WebSocketsGunnar Hillert
 
Стек Linux HTTPS/TCP/IP для защиты от HTTP-DDoS-атак
Стек Linux HTTPS/TCP/IP для защиты от HTTP-DDoS-атакСтек Linux HTTPS/TCP/IP для защиты от HTTP-DDoS-атак
Стек Linux HTTPS/TCP/IP для защиты от HTTP-DDoS-атакPositive Hack Days
 
Introduction to HTTP/2
Introduction to HTTP/2Introduction to HTTP/2
Introduction to HTTP/2Ido Flatow
 
HTTP/2 What's inside and Why
HTTP/2 What's inside and WhyHTTP/2 What's inside and Why
HTTP/2 What's inside and WhyAdrian Cole
 
Malware Detection with OSSEC HIDS - OSSECCON 2014
Malware Detection with OSSEC HIDS - OSSECCON 2014Malware Detection with OSSEC HIDS - OSSECCON 2014
Malware Detection with OSSEC HIDS - OSSECCON 2014Santiago Bassett
 
Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012Roland Bouman
 
Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012Roland Bouman
 
Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Alex Borysov
 
Real Time Health Analytics With WebSockets Python 3 and Redis PubSub: Benjami...
Real Time Health Analytics With WebSockets Python 3 and Redis PubSub: Benjami...Real Time Health Analytics With WebSockets Python 3 and Redis PubSub: Benjami...
Real Time Health Analytics With WebSockets Python 3 and Redis PubSub: Benjami...Redis Labs
 
Linux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure WebLinux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure WebAll Things Open
 
HTTP and 5G (fixed1)
HTTP and 5G (fixed1)HTTP and 5G (fixed1)
HTTP and 5G (fixed1)dynamis
 
DB Floripa - ProxySQL para MySQL
DB Floripa - ProxySQL para MySQLDB Floripa - ProxySQL para MySQL
DB Floripa - ProxySQL para MySQLMarcelo Altmann
 
L3HA-VRRP-20141201
L3HA-VRRP-20141201L3HA-VRRP-20141201
L3HA-VRRP-20141201Manabu Ori
 
NGINX: HTTP/2 Server Push and gRPC – EMEA
NGINX: HTTP/2 Server Push and gRPC – EMEANGINX: HTTP/2 Server Push and gRPC – EMEA
NGINX: HTTP/2 Server Push and gRPC – EMEANGINX, Inc.
 
MySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features SummaryMySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features SummaryOlivier DASINI
 
Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2Fastly
 
Introduction to HTTP protocol
Introduction to HTTP protocolIntroduction to HTTP protocol
Introduction to HTTP protocolAviran Mordo
 
Web Performance Optimization with HTTP/3
Web Performance Optimization with HTTP/3Web Performance Optimization with HTTP/3
Web Performance Optimization with HTTP/3SangJin Kang
 

Similar to Introduction to HTTP/2 and How To Use It (20)

Introduction to WebSockets
Introduction to WebSocketsIntroduction to WebSockets
Introduction to WebSockets
 
Стек Linux HTTPS/TCP/IP для защиты от HTTP-DDoS-атак
Стек Linux HTTPS/TCP/IP для защиты от HTTP-DDoS-атакСтек Linux HTTPS/TCP/IP для защиты от HTTP-DDoS-атак
Стек Linux HTTPS/TCP/IP для защиты от HTTP-DDoS-атак
 
Introduction to HTTP/2
Introduction to HTTP/2Introduction to HTTP/2
Introduction to HTTP/2
 
HTTP/2 What's inside and Why
HTTP/2 What's inside and WhyHTTP/2 What's inside and Why
HTTP/2 What's inside and Why
 
Malware Detection with OSSEC HIDS - OSSECCON 2014
Malware Detection with OSSEC HIDS - OSSECCON 2014Malware Detection with OSSEC HIDS - OSSECCON 2014
Malware Detection with OSSEC HIDS - OSSECCON 2014
 
Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
 
Common schema my sql uc 2012
Common schema   my sql uc 2012Common schema   my sql uc 2012
Common schema my sql uc 2012
 
Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.Enabling Googley microservices with HTTP/2 and gRPC.
Enabling Googley microservices with HTTP/2 and gRPC.
 
Real Time Health Analytics With WebSockets Python 3 and Redis PubSub: Benjami...
Real Time Health Analytics With WebSockets Python 3 and Redis PubSub: Benjami...Real Time Health Analytics With WebSockets Python 3 and Redis PubSub: Benjami...
Real Time Health Analytics With WebSockets Python 3 and Redis PubSub: Benjami...
 
Linux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure WebLinux HTTPS/TCP/IP Stack for the Fast and Secure Web
Linux HTTPS/TCP/IP Stack for the Fast and Secure Web
 
HTTP and 5G (fixed1)
HTTP and 5G (fixed1)HTTP and 5G (fixed1)
HTTP and 5G (fixed1)
 
DB Floripa - ProxySQL para MySQL
DB Floripa - ProxySQL para MySQLDB Floripa - ProxySQL para MySQL
DB Floripa - ProxySQL para MySQL
 
BRKSPG-3001.pdf
BRKSPG-3001.pdfBRKSPG-3001.pdf
BRKSPG-3001.pdf
 
L3HA-VRRP-20141201
L3HA-VRRP-20141201L3HA-VRRP-20141201
L3HA-VRRP-20141201
 
NGINX: HTTP/2 Server Push and gRPC – EMEA
NGINX: HTTP/2 Server Push and gRPC – EMEANGINX: HTTP/2 Server Push and gRPC – EMEA
NGINX: HTTP/2 Server Push and gRPC – EMEA
 
MySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features SummaryMySQL 8.0.18 - New Features Summary
MySQL 8.0.18 - New Features Summary
 
Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2
 
Introduction to HTTP protocol
Introduction to HTTP protocolIntroduction to HTTP protocol
Introduction to HTTP protocol
 
What is new in neutron QoS?
What is new in neutron QoS?What is new in neutron QoS?
What is new in neutron QoS?
 
Web Performance Optimization with HTTP/3
Web Performance Optimization with HTTP/3Web Performance Optimization with HTTP/3
Web Performance Optimization with HTTP/3
 

More from ArcBlock

ArcBlock Introduction to Blockchain
ArcBlock Introduction to BlockchainArcBlock Introduction to Blockchain
ArcBlock Introduction to BlockchainArcBlock
 
Forge blockchain deployment made easy
Forge  blockchain deployment made easyForge  blockchain deployment made easy
Forge blockchain deployment made easyArcBlock
 
Designing Decentralized Apps: Programmable Tokens
Designing Decentralized Apps: Programmable TokensDesigning Decentralized Apps: Programmable Tokens
Designing Decentralized Apps: Programmable TokensArcBlock
 
Build a Decentralized, public verifiable Database with ex_abci and Tendermint
Build a Decentralized, public verifiable Database with ex_abci and TendermintBuild a Decentralized, public verifiable Database with ex_abci and Tendermint
Build a Decentralized, public verifiable Database with ex_abci and TendermintArcBlock
 
ArcBlock Presents 5 Winning Factors to Building a Successful DApp
ArcBlock Presents 5 Winning Factors to Building a Successful DAppArcBlock Presents 5 Winning Factors to Building a Successful DApp
ArcBlock Presents 5 Winning Factors to Building a Successful DAppArcBlock
 
QRCodes are Fun, Easy, and Useful for Links, Payments and Identity Verification
QRCodes are Fun, Easy, and Useful for Links, Payments and Identity VerificationQRCodes are Fun, Easy, and Useful for Links, Payments and Identity Verification
QRCodes are Fun, Easy, and Useful for Links, Payments and Identity VerificationArcBlock
 
Designing Decentralized Applications (DApps)
Designing Decentralized Applications (DApps) Designing Decentralized Applications (DApps)
Designing Decentralized Applications (DApps) ArcBlock
 
Cryptography for everyone
Cryptography for everyoneCryptography for everyone
Cryptography for everyoneArcBlock
 
IPFS: A Whole New World
IPFS: A Whole New WorldIPFS: A Whole New World
IPFS: A Whole New WorldArcBlock
 
Ethereum virtual machine for Developers Part 1
Ethereum virtual machine for Developers Part 1Ethereum virtual machine for Developers Part 1
Ethereum virtual machine for Developers Part 1ArcBlock
 
Understanding hd wallets design and implementation
Understanding hd wallets  design and implementationUnderstanding hd wallets  design and implementation
Understanding hd wallets design and implementationArcBlock
 
Technical Learning Series - Elixir ExUnit
Technical Learning Series - Elixir ExUnitTechnical Learning Series - Elixir ExUnit
Technical Learning Series - Elixir ExUnitArcBlock
 
Tendermint in a nutshell
Tendermint in a nutshellTendermint in a nutshell
Tendermint in a nutshellArcBlock
 
Introduction to CQRS & Commended
Introduction to CQRS & CommendedIntroduction to CQRS & Commended
Introduction to CQRS & CommendedArcBlock
 
Decipher Multi-Factor Authentication - A Developers Introduction
Decipher Multi-Factor Authentication - A Developers IntroductionDecipher Multi-Factor Authentication - A Developers Introduction
Decipher Multi-Factor Authentication - A Developers IntroductionArcBlock
 
Introduction to aws data pipeline services
Introduction to aws data pipeline servicesIntroduction to aws data pipeline services
Introduction to aws data pipeline servicesArcBlock
 
Introduction to Ethereum Smart Contracts
Introduction to Ethereum Smart Contracts Introduction to Ethereum Smart Contracts
Introduction to Ethereum Smart Contracts ArcBlock
 
ArcBlock Presents An Introduction to Blockchain
ArcBlock Presents An Introduction to BlockchainArcBlock Presents An Introduction to Blockchain
ArcBlock Presents An Introduction to BlockchainArcBlock
 

More from ArcBlock (18)

ArcBlock Introduction to Blockchain
ArcBlock Introduction to BlockchainArcBlock Introduction to Blockchain
ArcBlock Introduction to Blockchain
 
Forge blockchain deployment made easy
Forge  blockchain deployment made easyForge  blockchain deployment made easy
Forge blockchain deployment made easy
 
Designing Decentralized Apps: Programmable Tokens
Designing Decentralized Apps: Programmable TokensDesigning Decentralized Apps: Programmable Tokens
Designing Decentralized Apps: Programmable Tokens
 
Build a Decentralized, public verifiable Database with ex_abci and Tendermint
Build a Decentralized, public verifiable Database with ex_abci and TendermintBuild a Decentralized, public verifiable Database with ex_abci and Tendermint
Build a Decentralized, public verifiable Database with ex_abci and Tendermint
 
ArcBlock Presents 5 Winning Factors to Building a Successful DApp
ArcBlock Presents 5 Winning Factors to Building a Successful DAppArcBlock Presents 5 Winning Factors to Building a Successful DApp
ArcBlock Presents 5 Winning Factors to Building a Successful DApp
 
QRCodes are Fun, Easy, and Useful for Links, Payments and Identity Verification
QRCodes are Fun, Easy, and Useful for Links, Payments and Identity VerificationQRCodes are Fun, Easy, and Useful for Links, Payments and Identity Verification
QRCodes are Fun, Easy, and Useful for Links, Payments and Identity Verification
 
Designing Decentralized Applications (DApps)
Designing Decentralized Applications (DApps) Designing Decentralized Applications (DApps)
Designing Decentralized Applications (DApps)
 
Cryptography for everyone
Cryptography for everyoneCryptography for everyone
Cryptography for everyone
 
IPFS: A Whole New World
IPFS: A Whole New WorldIPFS: A Whole New World
IPFS: A Whole New World
 
Ethereum virtual machine for Developers Part 1
Ethereum virtual machine for Developers Part 1Ethereum virtual machine for Developers Part 1
Ethereum virtual machine for Developers Part 1
 
Understanding hd wallets design and implementation
Understanding hd wallets  design and implementationUnderstanding hd wallets  design and implementation
Understanding hd wallets design and implementation
 
Technical Learning Series - Elixir ExUnit
Technical Learning Series - Elixir ExUnitTechnical Learning Series - Elixir ExUnit
Technical Learning Series - Elixir ExUnit
 
Tendermint in a nutshell
Tendermint in a nutshellTendermint in a nutshell
Tendermint in a nutshell
 
Introduction to CQRS & Commended
Introduction to CQRS & CommendedIntroduction to CQRS & Commended
Introduction to CQRS & Commended
 
Decipher Multi-Factor Authentication - A Developers Introduction
Decipher Multi-Factor Authentication - A Developers IntroductionDecipher Multi-Factor Authentication - A Developers Introduction
Decipher Multi-Factor Authentication - A Developers Introduction
 
Introduction to aws data pipeline services
Introduction to aws data pipeline servicesIntroduction to aws data pipeline services
Introduction to aws data pipeline services
 
Introduction to Ethereum Smart Contracts
Introduction to Ethereum Smart Contracts Introduction to Ethereum Smart Contracts
Introduction to Ethereum Smart Contracts
 
ArcBlock Presents An Introduction to Blockchain
ArcBlock Presents An Introduction to BlockchainArcBlock Presents An Introduction to Blockchain
ArcBlock Presents An Introduction to Blockchain
 

Recently uploaded

SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profileakrivarotava
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsJean Silva
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxRTS corp
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingShane Coughlan
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identityteam-WIBU
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesVictoriaMetrics
 

Recently uploaded (20)

SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profile
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024VictoriaMetrics Anomaly Detection Updates: Q1 2024
VictoriaMetrics Anomaly Detection Updates: Q1 2024
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Strategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero resultsStrategies for using alternative queries to mitigate zero results
Strategies for using alternative queries to mitigate zero results
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptxThe Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
The Role of IoT and Sensor Technology in Cargo Cloud Solutions.pptx
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full RecordingOpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
OpenChain Education Work Group Monthly Meeting - 2024-04-10 - Full Recording
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Post Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on IdentityPost Quantum Cryptography – The Impact on Identity
Post Quantum Cryptography – The Impact on Identity
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
What’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 UpdatesWhat’s New in VictoriaMetrics: Q1 2024 Updates
What’s New in VictoriaMetrics: Q1 2024 Updates
 

Introduction to HTTP/2 and How To Use It

  • 1. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 1/36 Intro to HTTP/2 Brought to you by Boshan Sun 1
  • 2. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 2/36 History of HTTP • HTTP/0.9, 1991 • HTTP/1.0, 1996, RFC 1945 • HTTP/1.1, 1999, RFC 2616, RFC 7230-7235 • HTTP/2, 2015, RFC 7540/7541 Related protocols • Gopher, 1991 • SPDY, 2012 2
  • 3. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 3/36 HTTP/1.1 client <----------------------> server GET / HTTP/1.1 HTTP/1.1 200 OK Host: example.com Content-Length: 1270 <!doctype html> <html> ... </html> 3
  • 4. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 4/36 HTTP/1.1 ➜ telnet example.com 80 Trying 93.184.216.34... Connected to example.com. Escape character is '^]'. GET / HTTP/1.1 Host: example.com HTTP/1.1 200 OK Content-Length: 1270 <!doctype html> <html> ... </html> 4
  • 5. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 5/36 Problems of HTTP/1.1 • TCP is not fully utilized • head of line blocking • too many request to render even for one page 5
  • 6. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 6/36 Problems of HTTP/1.1 client server | GET / | | -----------------------------> | | 200 OK | | <----------------------------- | | | | GET /favicon | | -----------------------------> | | 200 OK | | <----------------------------- | | | | GET /index.js | | -----------------------------> | | 200 OK | | <----------------------------- | | | | ... | | | | GET /title.png | | -----------------------------> | | 200 OK | | <----------------------------- | 6
  • 7. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 7/36 Workarounds • spriting: use a large image • inlining: put image inline • concatenation: put few js in one • sharding: connect to multiple servers 7
  • 8. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 8/36 HTTP/2 design goal • support url http:// & https:// • support proxy from http 1.x to http2 • no minor version number 8
  • 9. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 9/36 HTTP/2 • RFC 7540 - HTTP version 2 • RFC 7541 - HPACK: Header Compression for HTTP/2 9
  • 10. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 10/36 HTTP/2 features • one TCP connection • binary protocol • multiplexing • flow control and prioritization • header compression • server push 10
  • 11. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 11/36 Upgrade to HTTP/2 • Upgrade to https URI • Application Layer Protocol Negotiation(ALPN) • A connection preface PRI * HTTP/2.0 SM 11
  • 12. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 12/36 Frames +-----------------------------------------------+ | Length (24) | +---------------+---------------+---------------+ | Type (8) | Flags (8) | +-+-------------+---------------+-------------------------------+ |R| Stream Identifier (31) | +=+=============================================================+ | Frame Payload (0...) ... +---------------------------------------------------------------+ 12
  • 13. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 13/36 Types +---------------+------+ | Frame Type | Code | +---------------+------+ | DATA | 0x0 | | HEADERS | 0x1 | <- headers | PRIORITY | 0x2 | | RST_STREAM | 0x3 | | SETTINGS | 0x4 | <- settings | PUSH_PROMISE | 0x5 | | PING | 0x6 | | GOAWAY | 0x7 | | WINDOW_UPDATE | 0x8 | | CONTINUATION | 0x9 | +---------------+------+ 13
  • 14. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 14/36 Settings +-------------------------------+ | Identifier (16) | +-------------------------------+-------------------------------+ | Value (32) | +---------------------------------------------------------------+ +------------------------+------+---------------+ | Name | Code | Initial Value | +------------------------+------+---------------+ | HEADER_TABLE_SIZE | 0x1 | 4096 | | ENABLE_PUSH | 0x2 | 1 | | MAX_CONCURRENT_STREAMS | 0x3 | (infinite) | | INITIAL_WINDOW_SIZE | 0x4 | 65535 | | MAX_FRAME_SIZE | 0x5 | 16384 | | MAX_HEADER_LIST_SIZE | 0x6 | (infinite) | +------------------------+------+---------------+ 14
  • 15. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 15/36 Settings +-----------------------------------------------+ | Length (24) | +---------------+---------------+---------------+ | Type (8) | Flags (8) | +-+-------------+---------------+-------------------------------+ |R| Stream Identifier (31) | +=+=============================================================+ | Identifier (16) | +-------------------------------+-------------------------------+ | Value (32) | +---------------------------------------------------------------+ <<0,0,24,4,0,0,0,0,0,0,5,0,16,0,0,0,3,0,0,0,250,0,6,0,16,1,64,0,4,0,16,0,0>> 0,0,24, % length(24) 4,0, % type(SETTINGS), flags(0) 0,0,0,0, % stream id(0) 0,5, % MAX_FRAME_SIZE(1048576) 0,16,0,0, 0,3, % MAX_CONCURRENT_STREAMS(250) 0,0,0,250, 0,6, % MAX_HEADER_LIST_SIZE(1048896) 0,16,1,64, 0,4, % INITIAL_WINDOW_SIZE(1048576) 0,16,0,0 +-----------------------------------------------+ 15
  • 16. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 16/36 Headers +-----------------------------------------------+ | Length (24) | +---------------+---------------+---------------+ | Type (8) | Flags (8) | +-+-------------+---------------+-------------------------------+ |R| Stream Identifier (31) | +=+=============================================================+ |Pad Length? (8)| +-+-------------+-----------------------------------------------+ |E| Stream Dependency? (31) | +-+-------------+-----------------------------------------------+ | Weight? (8) | +-+-------------+-----------------------------------------------+ | Header Block Fragment (*) ... +---------------------------------------------------------------+ | Padding (*) ... +---------------------------------------------------------------+ 16
  • 17. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 17/36 HPACK: Header Compression for HTTP/2 • RFC 7541 ➜ curl -v http://example.com GET / HTTP/1.1 Host: example.com User-Agent: curl/7.54.0 Accept: */* HTTP/1.1 200 OK Accept-Ranges: bytes Cache-Control: max-age=604800 Content-Type: text/html; charset=UTF-8 Date: Mon, 19 Nov 2018 22:31:57 GMT ... 17
  • 18. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 18/36 Static Table +-------+-----------------------------+---------------+ | Index | Header Name | Header Value | +-------+-----------------------------+---------------+ | 1 | :authority | | <- host: example.com | 2 | :method | GET | <- GET | 3 | :method | POST | | 4 | :path | / | | 5 | :path | /index.html | | 6 | :scheme | http | | 7 | :scheme | https | | 8 | :status | 200 | | 9 | :status | 204 | | 10 | :status | 206 | | 11 | :status | 304 | | 12 | :status | 400 | | 13 | :status | 404 | | 14 | :status | 500 | | 15 | accept-charset | | | 16 | accept-encoding | gzip, deflate | | 17 | accept-language | | | 18 | accept-ranges | | | 19 | accept | | | ... | | | | 61 | www-authenticate | | +-------+-----------------------------+---------------+ 18
  • 19. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 19/36 Dynamic Table +-------+-----------------------------+---------------+ | Index | Header Name | Header Value | +-------+-----------------------------+---------------+ | 62 | x-user-name | hellokitty | | 63 | x-password | password123 | | ... | | | +-------+-----------------------------+---------------+ 19
  • 20. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 20/36 Our header GET / HTTP/1.1 Host: http2.golang.org :method: GET :scheme: https :path: / :authority: http2.golang.org +-------+-----------------------------+------------------+ | Index | Header Name | Header Value | +-------+-----------------------------+------------------+ | 1 | :authority | | http2.golang.org | 2 | :method | GET | | 4 | :path | / | | 7 | :scheme | https | +-------+-----------------------------+------------------+ 20
  • 21. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 21/36 How to represent a interger? 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | | +---+---------------------------+ +---+---+---+---+---+---+---+---+ | 0 0 0 0 0 0 0 0 | 0 +---+---------------------------+ +---+---+---+---+---+---+---+---+ | 1 1 1 1 1 1 1 1 | 255 +---+---------------------------+ 21
  • 22. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 22/36 Variable-length integer 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | ? | ? | ? | value | +---+---------------------------+ +---+---+---+---+---+---+---+---+ | ? | ? | ? | 0 0 0 0 0 | 0 +---+---------------------------+ +---+---+---+---+---+---+---+---+ | ? | ? | ? | 1 1 1 1 0 | 30 +---+---------------------------+ +---+---+---+---+---+---+---+---+ | ? | ? | ? | 1 1 1 1 1 | +---+---+---+-------------------+ | 0 | 0 | 0 + 31 = 31 +---+---------------------------+ +---+---+---+---+---+---+---+---+ | ? | ? | ? | 1 1 1 1 1 | +---+---+---+-------------------+ | 0 | 1 | 1 + 31 = 32 +---+---------------------------+ +---+---+---+---+---+---+---+---+ | ? | ? | ? | 1 1 1 1 1 | 22
  • 23. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 23/36 String literal 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | H | String Length (7+) | +---+---------------------------+ | String Data (Length octets) | +-------------------------------+ "" +---+---+---+---+---+---+---+---+ | 0 | 0 0 0 0 0 0 0 | 0 +---+---------------------------+ "abc" +---+---+---+---+---+---+---+---+ | 0 | 0 0 0 0 0 1 1 | 3 +---+---------------------------+ | 0 1 1 0 0 0 0 1 | 97(a) +-------------------------------+ | 0 1 1 0 0 0 1 0 | 98(b) +-------------------------------+ | 0 1 1 0 0 0 1 1 | 99(c) +-------------------------------+ "你好" +---+---+---+---+---+---+---+---+ | 0 | 0 0 0 0 1 1 0 | 6 +---+---------------------------+ 23
  • 24. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 24/36 Indexed Header Field +-------+-----------------------------+------------------+ | Index | Header Name | Header Value | +-------+-----------------------------+------------------+ | 1 | :authority | | http2.golang.org | 2 | :method | GET | | 4 | :path | / | | 7 | :scheme | https | +-------+-----------------------------+------------------+ 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 1 | Index (7+) | +---+---------------------------+ +---+---+---+---+---+---+---+---+ | 1 | 0 0 0 0 0 1 0 | 130 +---+---------------------------+ +---+---+---+---+---+---+---+---+ | 1 | 0 0 0 0 1 0 0 | 132 +---+---------------------------+ +---+---+---+---+---+---+---+---+ | 1 | 0 0 0 0 1 1 1 | 135 +---+---------------------------+ 24
  • 25. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 25/36 Literal Header Field • Literal Header Field with Incremental Indexing • Literal Header Field without Indexing • Literal Header Field Never Indexed 25
  • 26. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 26/36 Dynamic Table +-------+-----------------------------+---------------+ | Index | Header Name | Header Value | +-------+-----------------------------+---------------+ +-------+-----------------------------+---------------+ :method: GET :scheme: http :path: / :authority: example.com +-------+-----------------------------+---------------+ | Index | Header Name | Header Value | +-------+-----------------------------+---------------+ | 62 | :authority | example.com | +-------+-----------------------------+---------------+ :method: GET :scheme: http :path: / :authority: example.com cache-control: no-cache +-------+-----------------------------+---------------+ | Index | Header Name | Header Value | +-------+-----------------------------+---------------+ | 62 | cache-control | no-cache | | 63 | :authority | example.com | 26
  • 27. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 27/36 Literal Header Field with Incremental Indexing indexed name 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 0 | 1 | Index (6+) | +---+---+-----------------------+ | H | Value Length (7+) | +---+---------------------------+ | Value String (Length octets) | +-------------------------------+ new name 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 0 | 1 | 0 | +---+---+-----------------------+ | H | Name Length (7+) | +---+---------------------------+ | Name String (Length octets) | +---+---------------------------+ | H | Value Length (7+) | +---+---------------------------+ | Value String (Length octets) | +-------------------------------+ 27
  • 28. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 28/36 Literal Header Field with Incremental Indexing 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 0 | 1 | Index (6+) | +---+---+-----------------------+ | H | Value Length (7+) | +---+---------------------------+ | Value String (Length octets) | +-------------------------------+ +-------+-----------------------------+------------------+ | Index | Header Name | Header Value | +-------+-----------------------------+------------------+ | 1 | :authority | | http2.golang.org +-------+-----------------------------+------------------+ +---+---+---+---+---+---+---+---+ | 0 | 1 | 0 0 0 0 0 1 | 65 +---+---+-----------------------+ | 0 | 0 0 1 0 0 0 0 | 16 +---+---------------------------+ | 0 1 1 0 1 0 0 0 | 104(h) +-------------------------------+ | 0 1 1 1 0 1 0 0 | 116(t) +-------------------------------+ | 0 1 1 1 0 1 0 0 | 116(t) +-------------------------------+ | 0 1 1 1 0 0 0 0 | 112(p) 28
  • 29. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 29/36 Literal Header Field without Indexing 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | Index (4+) | +---+---+-----------------------+ | H | Value Length (7+) | +---+---------------------------+ | Value String (Length octets) | +-------------------------------+ +-------+-----------------------------+------------------+ | Index | Header Name | Header Value | +-------+-----------------------------+------------------+ | 1 | :authority | | http2.golang.org +-------+-----------------------------+------------------+ +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 0 | 0 0 0 1 | 1 +---+---+-----------------------+ | 0 | 0 0 1 0 0 0 0 | 16 +---+---------------------------+ | 0 1 1 0 1 0 0 0 | 104(h) +-------------------------------+ | 0 1 1 1 0 1 0 0 | 116(t) +-------------------------------+ | 0 1 1 1 0 1 0 0 | 116(t) +-------------------------------+ | 0 1 1 1 0 0 0 0 | 112(p) 29
  • 30. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 30/36 Literal Header Field never Indexing 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 1 | Index (4+) | +---+---+-----------------------+ | H | Value Length (7+) | +---+---------------------------+ | Value String (Length octets) | +-------------------------------+ 30
  • 31. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 31/36 HPACK in action :method: GET :scheme: https :path: / :authority: http2.golang.org +-------+-----------------------------+------------------+ | Index | Header Name | Header Value | +-------+-----------------------------+------------------+ | 1 | :authority | | http2.golang.org | 2 | :method | GET | | 4 | :path | / | | 7 | :scheme | https | +-------+-----------------------------+------------------+ <<130>> <<135>> <<132>> <<65,16,104,116,116,112,50,46,103,111,108,97,110,103,46,111,114,103>> 31
  • 32. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 32/36 Headers +-----------------------------------------------+ | Length (24) | +---------------+---------------+---------------+ | Type (8) | Flags (8) | +-+-------------+---------------+-------------------------------+ |R| Stream Identifier (31) | +=+=============================================================+ | Header Block Fragment (*) ... +---------------------------------------------------------------+ +-----------------------------------------------+ |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1| (21) +---------------+---------------+---------------+ |0 0 0 0 0 0 0 1|0 0 0 0 1 0 0 1| (END_HEADERS & END_STREAM) +-+-------------+---------------+---------------+---------------+ |0|0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1| (stream id 1) +=+=============================================================+ |1 0 0 0 0 0 1 0|1 0 0 0 0 1 1 1|1 0 0 0 0 1 0 0| +-----------------------------------------------+ ... 0,0,21, % length(21) 1,5, % type(HEADERS), flags(END_HEADERS & END_STREAM) 0,0,0,1, % stream id(1) 130,135,132, % header block fragment 65,16,104,116,116,112,50,46,103,111,108,97,110,103,46,111,114,103 32
  • 33. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 33/36 a simple http2 client https://github.com/sunboshan/h2 -module(http2). -export([start/0,init/0]). start() -> spawn(http2,init,[]). init() -> {ok,Socket} = ssl:connect("http2.golang.org",443,[ binary, {alpn_advertised_protocols,[<<"h2">>]} ]), Magic = "PRI * HTTP/2.0rnrnSMrnrn", Settings = <<0,0,0,4,0,0,0,0,0>>, ssl:send(Socket,[Magic,Settings]), loop(Socket). loop(Socket) -> receive {ssl,Socket,Data} -> parse(Data), loop(Socket); {send,Data} -> ssl:send(Socket,Data), 33
  • 34. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 34/36 a simple http2 client ➜ erl -s ssl 1> c(http2),P=http2:start(). <0.108.0> 2> P ! {send,<<0,0,21,1,5,0,0,0,3,130,135,132,65,16,104,116,116,112,50,46,103,111,108,97,110,103,46,111,114,103>>}. {send,<<0,0,21,1,5,0,0,0,3,130,135,132,1,16,104,116,116, 112,50,46,103,111,108,97,110,103,46,...>>} <html> <body> <h1>Go + HTTP/2</h1> <p>Welcome to <a href="https://golang.org/">the Go language</a>'s <a href="https://http2.github.io/">HTTP/2</a> demo & interop server.</p> <p>Congratulations, <b>you're using HTTP/2 right now</b>.</p> ... </body></html> 34
  • 35. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 35/36 HTTP/3 • HTTP-over-QUIC • Coming in 2019… maybe 35
  • 36. 12/18/2018 Intro to HTTP/2 http://127.0.0.1:8888/backend/abb7-http2.html 36/36 36