169
Good developers know how things work. Great developers know why things work.

HTTP/2 -- the future of WWW

Embed Size (px)

Citation preview

Page 1: HTTP/2 -- the future of WWW

Good developers know how things work.

Great developers know why things work.

Page 2: HTTP/2 -- the future of WWW

HTTP 2.0the future of WWW

@tkaczmarzykblog.kaczmarzyk.net

Tomek “Kosior” Kaczmarzyk

Page 3: HTTP/2 -- the future of WWW

HTTP 2.0the future of WWW

@tkaczmarzykblog.kaczmarzyk.net

Tomek “Kosior” Kaczmarzyk

HTTP/2

Page 4: HTTP/2 -- the future of WWW

About me

Just wandering around the world, developing software :)

I co-organize

FB/konferencjaboilingfrogs

Page 5: HTTP/2 -- the future of WWW

The plan

1. Introductioo0000oo00on

2. HTTP/2 in a nutshell 3. Performance of browser networking

4. Questions

Page 6: HTTP/2 -- the future of WWW

c = 299 792 458 m/s

Achievement unlocked!Tribute

Page 7: HTTP/2 -- the future of WWW
Page 8: HTTP/2 -- the future of WWW

Achievement unlocked!Ba-dum-tss Level 2

Page 9: HTTP/2 -- the future of WWW
Page 10: HTTP/2 -- the future of WWW

=======================================

=======================================0100110101011001011000110010110001100101

client server

[ 0%]

Page 11: HTTP/2 -- the future of WWW

=======================================

=======================================

client server

Page 12: HTTP/2 -- the future of WWW
Page 13: HTTP/2 -- the future of WWW
Page 14: HTTP/2 -- the future of WWW

SYN

Page 15: HTTP/2 -- the future of WWW

SYN-ACK

Page 16: HTTP/2 -- the future of WWW

ACK

Page 17: HTTP/2 -- the future of WWW
Page 18: HTTP/2 -- the future of WWW

=======================================

=======================================

client server

Page 19: HTTP/2 -- the future of WWW
Page 20: HTTP/2 -- the future of WWW

1 bandwidth

[Mbps]2 3 4 5 6 7 8 9

2500

2000

1000

1500

3000

pageload time

[ms]

page load timevs increasing bandwidth

Page 21: HTTP/2 -- the future of WWW

page load timevs decreasing latency

180 latency[ms]

140 100 60 20

2500

2000

1000

1500

3000

pageload time

[ms]

Page 22: HTTP/2 -- the future of WWW

Have you ever?

Achievement unlocked!Tribute

Page 23: HTTP/2 -- the future of WWW

Server

Client

HTTP/0.9

Page 24: HTTP/2 -- the future of WWW

Server

Client

HTTP/0.9

starting a TCP/IP connection

Page 25: HTTP/2 -- the future of WWW

GET /resource HTTP/0.9Host: example.orgAccept: image/jpeg

Server

Client

HTTP/0.9

Page 26: HTTP/2 -- the future of WWW

HTTP/0.9 304 Not ModifiedETag: "xyzzy"Expires: Thu, 23 Jan ...

Server

Client

HTTP/0.9

Page 27: HTTP/2 -- the future of WWW

Server

Client

HTTP/0.9

closing the TCP/IP connection

Page 28: HTTP/2 -- the future of WWW

Server

Client

HTTP/1.0

Page 29: HTTP/2 -- the future of WWW

GET /resource HTTP/1.0Host: example.orgAccept: image/jpeg

Server

Client

HTTP/1.0

Page 30: HTTP/2 -- the future of WWW

HTTP/1.0 304 Not ModifiedETag: "xyzzy"Expires: Thu, 23 Jan ...

Server

Client

HTTP/1.0

Page 31: HTTP/2 -- the future of WWW

GET /resource2 HTTP/1.0Host: example.orgAccept: image/jpeg

Server

Client

HTTP/1.0

Page 32: HTTP/2 -- the future of WWW

HTTP/1.0 200 OKETag: "xyzzy"...

Server

Client

HTTP/1.0

Page 33: HTTP/2 -- the future of WWW

Server

Client

HTTP/1.0re

ques

t1 response1

requ

est2

requ

est3

response2

response3

Page 34: HTTP/2 -- the future of WWW

Server

Client

HTTP/1.1re

ques

t1re

ques

t2

requ

est3

Page 35: HTTP/2 -- the future of WWW

Server

Client

HTTP/1.1re

ques

t1re

ques

t2

requ

est3

!!! head of line blocking

Page 36: HTTP/2 -- the future of WWW

Server

Client

multiple connectionsper browser session

Page 37: HTTP/2 -- the future of WWW

Server

Client

Page 38: HTTP/2 -- the future of WWW

Server

Client

Page 39: HTTP/2 -- the future of WWW

WTF!?

WTF!?

Server

Client

Page 40: HTTP/2 -- the future of WWW
Page 41: HTTP/2 -- the future of WWW
Page 42: HTTP/2 -- the future of WWW
Page 43: HTTP/2 -- the future of WWW

SPDY

Page 44: HTTP/2 -- the future of WWW

RFC 7540 – HTTP/2RFC 7541 – HPACK

Page 45: HTTP/2 -- the future of WWW

1. Introductioo0000oo00on

2. HTTP/2 in a nutshell 3. Performance of browser networking

4. Questions

The plan

Page 46: HTTP/2 -- the future of WWW

Achievement unlocked!Ba-dum-tss Level 3

Page 47: HTTP/2 -- the future of WWW
Page 48: HTTP/2 -- the future of WWW
Page 49: HTTP/2 -- the future of WWW

Server

Client

single

conn

ectio

n!

Page 50: HTTP/2 -- the future of WWW

Server

Client

single

conn

ectio

n!

Page 51: HTTP/2 -- the future of WWW

Server

Client

single

conn

ectio

n!

stream 1HEADERS

stream 1DATA

stream 1HEADERS

Page 52: HTTP/2 -- the future of WWW

Server

Client

single

conn

ectio

n!

stream 1HEADERS

stream 3DATA

stream 1DATA

stream 3HEADERS stream 1

HEADERS

stream 3HEADERS

Page 53: HTTP/2 -- the future of WWW

Server

Client

single

conn

ectio

n!

stream 1HEADERS

stream 3DATA

stream 1DATA

stream 3HEADERS

stream 5HEADERS

stream 5DATA

stream 5DATA

stream 7HEADERS

stream 1HEADERS

stream 3HEADERS

Page 54: HTTP/2 -- the future of WWW

Server

Client

single

conn

ectio

n!

Page 55: HTTP/2 -- the future of WWW

Server

Client

single

conn

ectio

n!

GO AWAY

Page 56: HTTP/2 -- the future of WWW

Server

Client

single

conn

ectio

n!

GO AWAY

Page 57: HTTP/2 -- the future of WWW

Server

Client

new

conn

ectio

n!

Page 58: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg

Page 59: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg

HTTP/2

Page 60: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg

HEADERS

HTTP/2

Page 61: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg

HEADERS

HTTP/2

+END_STREAM+END_HEADERS

Page 62: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg

HEADERS

HTTP/2

+END_STREAM+END_HEADERS

flags(binary header)

Page 63: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg

HEADERS

HTTP/2

+END_STREAM+END_HEADERS

flags(binary header)

host = example.org accept = image/jpeg

Page 64: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg

HEADERS

HTTP/2

+END_STREAM+END_HEADERS

flags(binary header)

:method = GET :scheme = https :path = /resource host = example.org accept = image/jpeg

Page 65: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg

HEADERS

HTTP/2

+END_STREAM+END_HEADERS :method = GET :scheme = https :path = /resource host = example.org accept = image/jpeg

flags(binary header)

pseudo headers

Page 66: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg…foo: barcookie: a=b; e=f

Page 67: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg…foo: barcookie: a=b; e=f

HEADERS

CONTINUATION

-END_STREAM-END_HEADERS

+END_STREAM+END_HEADERS

:method = GET :scheme = https :path = /resource host = example.org accept = image/jpeg

…foo = barcookie = a=bcookie = e=f

HTTP/2

Page 68: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg…foo: barcookie: a=b; e=f

HTTP/2

HEADERS

CONTINUATION

-END_STREAM-END_HEADERS

+END_STREAM+END_HEADERS

:method = GET :scheme = https :path = /resource host = example.org accept = image/jpeg

…foo = barcookie = a=bcookie = e=f

mind the flags!

Page 69: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1Host: example.orgAccept: image/jpeg…foo: barcookie: a=b; e=f

HTTP/2

HEADERS

CONTINUATION

-END_STREAM-END_HEADERS

+END_STREAM+END_HEADERS

:method = GET :scheme = https :path = /resource host = example.org accept = image/jpeg

…foo = barcookie = a=bcookie = e=f

mind the flags!

decomposed for cacheability

Page 70: HTTP/2 -- the future of WWW

POST /resource HTTP/1.1Host: example.orgAccept: application/json…foo: barcookie: a=b; e=f

{ “name”: ”Homer”}

Page 71: HTTP/2 -- the future of WWW

POST /resource HTTP/1.1Host: example.orgAccept: application/json…foo: barcookie: a=b; e=f

{ “name”: ”Homer”}

HTTP/2

HEADERS

DATA

-END_STREAM+END_HEADERS

+END_STREAM

:method = POST :scheme = https :path = /resource host = example.org accept = app./json

{ “name”: ”Homer”}

Page 72: HTTP/2 -- the future of WWW

HPACK

Page 73: HTTP/2 -- the future of WWW

:method = GET:scheme = HTTPS:host = example.org:path = /resourceuser-agent = Chrome...cookie = JSESSIONID...

Page 74: HTTP/2 -- the future of WWW

:method = GET:scheme = HTTPS:host = example.org:path = /resourceuser-agent = Chrome...cookie = JSESSIONID...

Static table

1

2

9

...

...

usr-agent

method

scheme

Chrome

GET

HTTPS

Page 75: HTTP/2 -- the future of WWW

:method = GET:scheme = HTTPS:host = example.org:path = /resourceuser-agent = Chrome...cookie = JSESSIONID...

Static table

1

2

9

...

...

usr-agent

method

scheme

Chrome

GET

HTTPS

Page 76: HTTP/2 -- the future of WWW

:method = GET:scheme = HTTPS:host = example.org:path = /resourceuser-agent = Chrome...cookie = JSESSIONID...

Static table

1

2

9

...

...

usr-agent

method

scheme

Chrome

GET

HTTPS

29:host = example.org:path = /resource1cookie = JSESSION...

Page 77: HTTP/2 -- the future of WWW

:method = GET:scheme = HTTPS:host = example.org:path = /resourceuser-agent = Chrome...cookie = JSESSIONID...

Static table

1

2

9

...

...

usr-agent

method

scheme

Chrome

GET

HTTPS

29:host = example.org:path = /resource1cookie = JSESSION...

Page 78: HTTP/2 -- the future of WWW

:method = GET:scheme = HTTPS:host = example.org:path = /resourceuser-agent = Chrome...cookie = JSESSIONID...

Static table

1

2

9

...

...

usr-agent

method

scheme

Chrome

GET

HTTPS

29:host = example.org:path = /resource1cookie = JSESSION...

Dynamic table

21

...

cookie JSESSION...

Page 79: HTTP/2 -- the future of WWW

:method = GET:scheme = HTTPS:host = example.org:path = /resourceuser-agent = Chrome...cookie = JSESSIONID...

Static table

1

2

9

...

...

usr-agent

method

scheme

Chrome

GET

HTTPS

29:host = example.org:path = /resource121

Dynamic table

21

...

cookie JSESSION...

Page 80: HTTP/2 -- the future of WWW

Static table

Dynamic table

:method = GET:scheme = HTTPS:host = example.org:path = /resourceuser-agent = Chrome...cookie = JSESSIONID...

1

2

9

...

...

21

...

29:host = example.org:path = /resource121

usr-agent

method

scheme

Chrome

GET

HTTPS

cookie JSESSION...

+Huffman

Page 81: HTTP/2 -- the future of WWW

server push

Page 82: HTTP/2 -- the future of WWW

<html><head> ... <link rel=”stylesheet” type=”text/css” href=”...” /></head><body>

... <img src=”...”/> ...</body></html>

Page 83: HTTP/2 -- the future of WWW
Page 84: HTTP/2 -- the future of WWW

Server

Client

Page 85: HTTP/2 -- the future of WWW

Server

Client

stream

1

GET in

dex.htm

l

Page 86: HTTP/2 -- the future of WWW

Server

Client

stream

1

GET in

dex.htm

l

Page 87: HTTP/2 -- the future of WWW

Server

Client

stream 2PUSH_PROMISE(stylesheet)

stream 4PUSH_PROMISE

(image)

local cache

stream

1

GET in

dex.htm

l

Page 88: HTTP/2 -- the future of WWW

Server

Client

stream 2PUSH_PROMISE(stylesheet)

stream 4PUSH_PROMISE

(image)

stream 1HEADERS

(index.html)

stream 1DATA

(index.html)

local cache

stream

1

GET in

dex.htm

l

Page 89: HTTP/2 -- the future of WWW

Server

Client

stream 2PUSH_PROMISE(stylesheet)

stream 4PUSH_PROMISE

(image)

local cache

Page 90: HTTP/2 -- the future of WWW

Server

Client

stream 2PUSH_PROMISE(stylesheet)

stream 4PUSH_PROMISE

(image)

local cache

GET

stylesheet

Page 91: HTTP/2 -- the future of WWW

Server

Client

stream 2PUSH_PROMISE(stylesheet)

stream 4PUSH_PROMISE

(image)

local cache

GET

stylesheet

Page 92: HTTP/2 -- the future of WWW

Jetty – “smart push”

GET index.htmlGET style.cssGET script.js

Page 93: HTTP/2 -- the future of WWW

Jetty – “smart push”

GET index.htmlGET style.css {Referer: /index.html}GET script.js {Referer: /index.html}

Page 94: HTTP/2 -- the future of WWW

Jetty – “smart push”

GET index.htmlGET style.css {Referer: /index.html}GET script.js {Referer: /index.html}

Page 95: HTTP/2 -- the future of WWW

Jetty – “smart push”

GET index.htmlGET style.css {Referer: /index.html}GET script.js {Referer: /index.html}

GET index.html push: script.js, style.css, index.html

Page 96: HTTP/2 -- the future of WWW

* flow control

* prioritization

* stream dependencies

Even more sexy stuff...

Page 97: HTTP/2 -- the future of WWW

Flow control

Page 98: HTTP/2 -- the future of WWW

client

server

Page 99: HTTP/2 -- the future of WWW

client

server

Page 100: HTTP/2 -- the future of WWW

client

server

Page 101: HTTP/2 -- the future of WWW

client

server

1010011010110101110101101

Page 102: HTTP/2 -- the future of WWW

client

server

1010011010110101110101101

Achievement unlocked!Awwww...

Page 103: HTTP/2 -- the future of WWW

client

server

1010011010110101110101101

Page 104: HTTP/2 -- the future of WWW

client

server

1010011010110101110101101

101001101

Page 105: HTTP/2 -- the future of WWW

client

server

1010011010110101110101101

101001101011011111

Page 106: HTTP/2 -- the future of WWW

client

server

1010011010110101110101101

10100110101101111100001101

Page 107: HTTP/2 -- the future of WWW

client

server

1010011010110101110101101

10100110101101111100001101011011111

Page 108: HTTP/2 -- the future of WWW

client

server

1010011010110101110101101

10100110101101111100001101011011111

011011110100110111110011101111101001001110111001000011

Page 109: HTTP/2 -- the future of WWW

client

server

with HTTP/2flow control!

SETTINGS(initial

window size)65,535

Page 110: HTTP/2 -- the future of WWW

client

server

with HTTP/2flow control!

65,535 DATA

Page 111: HTTP/2 -- the future of WWW

client

server

with HTTP/2flow control!

41,003 DATA

Page 112: HTTP/2 -- the future of WWW

client

server

with HTTP/2flow control!

2^31 - 1WINDOWUPDATE

Page 113: HTTP/2 -- the future of WWW

client

server

with HTTP/2flow control!

2^31 - 1

WINDOWUPDATE

WINDOWUPDATE131070

Page 114: HTTP/2 -- the future of WWW

Prioritization

& stream dependencies

Page 115: HTTP/2 -- the future of WWW

B1

Page 116: HTTP/2 -- the future of WWW

B1

stream

weight

Page 117: HTTP/2 -- the future of WWW

A3

B1

stream

weight

Page 118: HTTP/2 -- the future of WWW

A3

B1

stream

weight

* implicit root stream

Page 119: HTTP/2 -- the future of WWW

A3

B1

C2

*

D1

Page 120: HTTP/2 -- the future of WWW

1. Introductioo0000oo00on

2. HTTP/2 in a nutshell 3. Performance of browser networking

4. Questions

The plan

Page 121: HTTP/2 -- the future of WWW
Page 122: HTTP/2 -- the future of WWW

The web is dead and I have killed it.

Page 123: HTTP/2 -- the future of WWW
Page 124: HTTP/2 -- the future of WWW
Page 125: HTTP/2 -- the future of WWW

– what's web?– web is dead, baby,

web is dead...

Achievement unlocked!Tribute

Page 126: HTTP/2 -- the future of WWW

HTTP/2 vsnetwork performance patterns

Page 127: HTTP/2 -- the future of WWW

* domain sharding* asset concatenation

Page 128: HTTP/2 -- the future of WWW

* domain sharding* asset concatenation

it's a single connecti

on with HTTP/2

Page 129: HTTP/2 -- the future of WWW

* resource inlining

Page 130: HTTP/2 -- the future of WWW

* resource inlining

server push is better!

Page 131: HTTP/2 -- the future of WWW

Content Delivery Networks

Page 132: HTTP/2 -- the future of WWW
Page 133: HTTP/2 -- the future of WWW
Page 134: HTTP/2 -- the future of WWW

* compression* reducing HTTP redirects* reducing DNS lookups* caching on the client

Page 135: HTTP/2 -- the future of WWW

1. Introductioo0000oo00on

2. HTTP/2 in a nutshell 3. Performance of browser networking

4. Questions

The plan

Page 136: HTTP/2 -- the future of WWW
Page 137: HTTP/2 -- the future of WWW

caniuse.com

Page 138: HTTP/2 -- the future of WWW

The future is now(!?)

Page 139: HTTP/2 -- the future of WWW

HTTP 2.0the future of WWW

@tkaczmarzykblog.kaczmarzyk.net

HTTP/2

thanks!

?

Tomek “Kosior” Kaczmarzyk

(not only)

Page 140: HTTP/2 -- the future of WWW

FAQ

Page 141: HTTP/2 -- the future of WWW

Where can I find more information about HTTP/2?

Page 142: HTTP/2 -- the future of WWW

Where can I find more information about HTTP/2?

* RFC 7540 (really!)* “High Performance Browser Networking” By Ilya Grigorik

Page 143: HTTP/2 -- the future of WWW

The future is now? Really?

Page 144: HTTP/2 -- the future of WWW

“HTTP/1.1 will be around for at least another decade “

1. Negotiating HTTP/2 with TLS handshake

2. Upgrading a plaintext connection to HTTP/2

3. Initiating a plaintext HTTP/2 connection

Page 145: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1 Host: boilingfrogs.pl Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: (... SETTINGS payload …)-----------------------------------------------------------

Page 146: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1 Host: boilingfrogs.pl Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: (... SETTINGS payload …)-----------------------------------------------------------

Page 147: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1 Host: boilingfrogs.pl Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: (... SETTINGS payload …)-----------------------------------------------------------

Page 148: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1 Host: boilingfrogs.pl Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: (... SETTINGS payload …)-----------------------------------------------------------

HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: h2c

(... HTTP/2 response …)

Page 149: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1 Host: boilingfrogs.pl Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: (... SETTINGS payload …)-----------------------------------------------------------

HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: h2c

(... HTTP/2 response …)

Page 150: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1 Host: boilingfrogs.pl Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: (... SETTINGS payload …)-----------------------------------------------------------

HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: h2c

(... HTTP/2 response …)-----------------------------------------------------------

HTTP/1.1 200 OK Content-length: 243 Content-type: text/html

(... HTTP/1.1 response ...)

Page 151: HTTP/2 -- the future of WWW

GET /resource HTTP/1.1 Host: boilingfrogs.pl Connection: Upgrade, HTTP2-Settings Upgrade: h2c HTTP2-Settings: (... SETTINGS payload …)-----------------------------------------------------------

HTTP/1.1 101 Switching Protocols Connection: Upgrade Upgrade: h2c

(... HTTP/2 response …)-----------------------------------------------------------

HTTP/1.1 200 OK Content-length: 243 Content-type: text/html

(... HTTP/1.1 response ...)

Page 152: HTTP/2 -- the future of WWW

Are there any downsidesof one connection per origin?

Page 153: HTTP/2 -- the future of WWW

server

client

Page 154: HTTP/2 -- the future of WWW

server

client

1

3

2

Page 155: HTTP/2 -- the future of WWW

server

client

1

3

2

Page 156: HTTP/2 -- the future of WWW

server

client

1

3

2

Page 157: HTTP/2 -- the future of WWW

server

client

1

3

2

TCP buffer: 1 3

Page 158: HTTP/2 -- the future of WWW

server

client

1

3

TCP buffer: 1 3

2

Page 159: HTTP/2 -- the future of WWW

server

client

1

3

TCP buffer: 1 3

22x ACK

Page 160: HTTP/2 -- the future of WWW

server

client

1

3

TCP buffer: 1 3

22x ACK

retran

smit

Page 161: HTTP/2 -- the future of WWW

server

client

1

3

TCP buffer: 1 3

22x ACK

retran

smit

2

Page 162: HTTP/2 -- the future of WWW

server

client

TCP buffer:

1

3

22x ACK

retran

smit

1 32

ACK

Page 163: HTTP/2 -- the future of WWW

“In tests so far, the negative effects of head-of-line blocking (especially in the presence of packet loss) is outweighed by the benefits of compression and prioritization.” 

-- Hypertext Transfer Protocol version 2

Page 164: HTTP/2 -- the future of WWW

Server pushvs

SSE & web sockets

Page 165: HTTP/2 -- the future of WWW

Why do we needheader compression?

Page 166: HTTP/2 -- the future of WWW

Why HPACK?

Page 167: HTTP/2 -- the future of WWW

Morequestions? :)

Page 168: HTTP/2 -- the future of WWW

HTTP 2.0the future of WWW

@tkaczmarzykblog.kaczmarzyk.net

HTTP/2

thanks!

?

Tomek “Kosior” Kaczmarzyk

(not only)

Page 169: HTTP/2 -- the future of WWW

Acknowledgements

https://www.flickr.com/photos/eldelinux/15041976222/

Ilya Grigorik (@igrigorik)

“High performance browser networking”

https://www.flickr.com/photos/cblue98/5115058146

Photo Credit