SlideShare a Scribd company logo
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

Observability with HAProxy
Observability with HAProxyObservability with HAProxy
Observability with HAProxy
HAProxy Technologies
 
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
Source Conference
 
What's New in HAProxy
What's New in HAProxyWhat's New in HAProxy
What's New in HAProxy
HAProxy Technologies
 
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 ISC
Men and Mice
 
Stuart Larsen, attacking http2implementations-rev1
Stuart Larsen, attacking http2implementations-rev1Stuart Larsen, attacking http2implementations-rev1
Stuart Larsen, attacking http2implementations-rev1
PacSecJP
 
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 Tier
VMware Tanzu
 
HTTP/2 Introduction
HTTP/2 IntroductionHTTP/2 Introduction
HTTP/2 Introduction
Walter Liu
 
Prezentacja zimowisko 2014
Prezentacja zimowisko 2014Prezentacja zimowisko 2014
Prezentacja zimowisko 2014
Marek Oszczapiński
 
Grpc present
Grpc presentGrpc present
Grpc present
Phạm Hải Anh
 
HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30HTTP2 & HPACK #pyfes 2013-11-30
HTTP2 & HPACK #pyfes 2013-11-30
Jxck 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 2012
Fabian Lange
 
Delivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINXDelivering High Performance Websites with NGINX
Delivering High Performance Websites with NGINX
NGINX, Inc.
 
Route Origin Validation - A MANRS Approach
Route Origin Validation - A MANRS ApproachRoute Origin Validation - A MANRS Approach
Route Origin Validation - A MANRS Approach
Bangladesh Network Operators Group
 
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
Men and Mice
 
Technical Overview of QUIC
Technical  Overview of QUICTechnical  Overview of QUIC
Technical Overview of QUIC
shigeki_ohtsu
 
An Introduction to BGP Flow Spec
An Introduction to BGP Flow SpecAn Introduction to BGP Flow Spec
An Introduction to BGP Flow Spec
ShortestPathFirst
 
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
Men 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 WebSockets
Gunnar 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/2
Ido 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 Why
Adrian 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 2014
Santiago 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 Web
All 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 MySQL
Marcelo Altmann
 
L3HA-VRRP-20141201
L3HA-VRRP-20141201L3HA-VRRP-20141201
L3HA-VRRP-20141201
Manabu 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 – EMEA
NGINX, 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 Summary
Olivier DASINI
 
Revisiting HTTP/2
Revisiting HTTP/2Revisiting HTTP/2
Revisiting HTTP/2
Fastly
 
Introduction to HTTP protocol
Introduction to HTTP protocolIntroduction to HTTP protocol
Introduction to HTTP protocol
Aviran Mordo
 
What is new in neutron QoS?
What is new in neutron QoS?What is new in neutron QoS?
What is new in neutron QoS?
Sławomir Kapłoński
 
Web Performance Optimization with HTTP/3
Web Performance Optimization with HTTP/3Web Performance Optimization with HTTP/3
Web Performance Optimization with HTTP/3
SangJin 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 Blockchain
ArcBlock
 
Forge blockchain deployment made easy
Forge  blockchain deployment made easyForge  blockchain deployment made easy
Forge blockchain deployment made easy
ArcBlock
 
Designing Decentralized Apps: Programmable Tokens
Designing Decentralized Apps: Programmable TokensDesigning Decentralized Apps: Programmable Tokens
Designing Decentralized Apps: Programmable Tokens
ArcBlock
 
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
 
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
ArcBlock
 
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
ArcBlock
 
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 everyone
ArcBlock
 
IPFS: A Whole New World
IPFS: A Whole New WorldIPFS: A Whole New World
IPFS: A Whole New World
ArcBlock
 
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
ArcBlock
 
Understanding hd wallets design and implementation
Understanding hd wallets  design and implementationUnderstanding hd wallets  design and implementation
Understanding hd wallets design and implementation
ArcBlock
 
Technical Learning Series - Elixir ExUnit
Technical Learning Series - Elixir ExUnitTechnical Learning Series - Elixir ExUnit
Technical Learning Series - Elixir ExUnit
ArcBlock
 
Tendermint in a nutshell
Tendermint in a nutshellTendermint in a nutshell
Tendermint in a nutshell
ArcBlock
 
Introduction to CQRS & Commended
Introduction to CQRS & CommendedIntroduction to CQRS & Commended
Introduction to CQRS & Commended
ArcBlock
 
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
ArcBlock
 
Introduction to aws data pipeline services
Introduction to aws data pipeline servicesIntroduction to aws data pipeline services
Introduction to aws data pipeline services
ArcBlock
 
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 Blockchain
ArcBlock
 

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

A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
kalichargn70th171
 
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Hivelance Technology
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
varshanayak241
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
vrstrong314
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
NaapbooksPrivateLimi
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
takuyayamamoto1800
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
Globus
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
MayankTawar1
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
AMB-Review
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
Cyanic lab
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
wottaspaceseo
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
Tier1 app
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
Georgi Kodinov
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
Globus
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Natan Silnitsky
 

Recently uploaded (20)

A Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdfA Comprehensive Look at Generative AI in Retail App Testing.pdf
A Comprehensive Look at Generative AI in Retail App Testing.pdf
 
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
top nidhi software solution freedownload
top nidhi software solution freedownloadtop nidhi software solution freedownload
top nidhi software solution freedownload
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
GlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote sessionGlobusWorld 2024 Opening Keynote session
GlobusWorld 2024 Opening Keynote session
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 
Software Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdfSoftware Testing Exam imp Ques Notes.pdf
Software Testing Exam imp Ques Notes.pdf
 
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdfDominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
Dominate Social Media with TubeTrivia AI’s Addictive Quiz Videos.pdf
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
How Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptxHow Recreation Management Software Can Streamline Your Operations.pptx
How Recreation Management Software Can Streamline Your Operations.pptx
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx2024 RoOUG Security model for the cloud.pptx
2024 RoOUG Security model for the cloud.pptx
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Understanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSageUnderstanding Globus Data Transfers with NetSage
Understanding Globus Data Transfers with NetSage
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 

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