Top Banner
HTTP/2.0 101 Introduction @BastianHofmann
193

Http:2.0 101 introduction (workshop) - Bastian Hofmann

Apr 13, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/2.0

101 Introduction

@BastianHofmann

Page 2: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 3: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 4: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 5: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 6: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Questions? Ask

Page 7: Http:2.0 101 introduction (workshop) - Bastian Hofmann

http://speakerdeck.com/u/bastianhofmann

Page 8: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://www.flickr.com/photos/duncan/3171592427/

Page 9: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://commons.wikimedia.org/wiki/File:Internet1.jpg#/media/File:Internet1.jpg

Page 10: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://www.flickr.com/photos/neilsingapore/3567378586/

Page 11: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/0.9http://www.w3.org/Protocols/HTTP/AsImplemented.html

1991

Page 12: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.0https://tools.ietf.org/html/rfc1945

1996

Page 13: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1http://tools.ietf.org/html/rfc2616

1999

Page 14: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1http://tools.ietf.org/html/rfc2616

http://tools.ietf.org/html/rfc7230

http://tools.ietf.org/html/rfc7231

http://tools.ietf.org/html/rfc7232

http://tools.ietf.org/html/rfc7235

http://tools.ietf.org/html/rfc7234

http://tools.ietf.org/html/rfc7233

2014

Page 15: Http:2.0 101 introduction (workshop) - Bastian Hofmann

20 years ago

Page 16: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 17: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://www.flickr.com/photos/offshore/1433329174/

Page 18: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 19: Http:2.0 101 introduction (workshop) - Bastian Hofmann

http://www.impressivewebs.com/importance-of-website-performance-sources/

Page 20: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Average page size

Page 21: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Average asset count

Page 22: Http:2.0 101 introduction (workshop) - Bastian Hofmann

http://www.soasta.com/blog/page-bloat-average-web-page-2-mb/

Page 23: Http:2.0 101 introduction (workshop) - Bastian Hofmann

http://httparchive.org/trends.php

Page 24: Http:2.0 101 introduction (workshop) - Bastian Hofmann

The internet gets slower and slower

Page 25: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://www.flickr.com/photos/91026431@N05/8497636527/

Page 26: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Slow connections

Page 27: Http:2.0 101 introduction (workshop) - Bastian Hofmann

High latency

Page 28: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://flic.kr/p/KpBcj

Page 29: Http:2.0 101 introduction (workshop) - Bastian Hofmann

It’s hard work to keep a page fast

Page 30: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Lots of hacks around HTTP

needed

Page 31: Http:2.0 101 introduction (workshop) - Bastian Hofmann

It needs to get better

Page 32: Http:2.0 101 introduction (workshop) - Bastian Hofmann

SPDY

Page 33: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/2http://tools.ietf.org/html/rfc7540http://tools.ietf.org/html/rfc7541

2015

Page 34: Http:2.0 101 introduction (workshop) - Bastian Hofmann

New possibilities for web

applications

Page 35: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Increased performance

Page 36: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Old truths may not be valid

anymore

Page 37: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1 in detail

Page 38: Http:2.0 101 introduction (workshop) - Bastian Hofmann

User enters URL

Page 39: Http:2.0 101 introduction (workshop) - Bastian Hofmann

DNS lookup

Page 40: Http:2.0 101 introduction (workshop) - Bastian Hofmann

TCP connection

Page 41: Http:2.0 101 introduction (workshop) - Bastian Hofmann

TLS handshake

Page 42: Http:2.0 101 introduction (workshop) - Bastian Hofmann

This already takes time

Page 43: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Already some Optimizations

Page 44: Http:2.0 101 introduction (workshop) - Bastian Hofmann

DNS caching

Page 45: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Connection Keep Alive

Page 46: Http:2.0 101 introduction (workshop) - Bastian Hofmann

TLS optimizations

Page 47: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Finally: HTTP

Page 48: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP request

Page 49: Http:2.0 101 introduction (workshop) - Bastian Hofmann

GET/HTTP/1.1Host:www.researchgate.net

Page 50: Http:2.0 101 introduction (workshop) - Bastian Hofmann

GET/homeHTTP/1.1Host:www.researchgate.netpragma:no-cachednt:1accept-encoding:gzip,deflate,sdchaccept-language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4user-agent:Mozilla/5.0(Macintosh;IntelMacOSX10_10_4)AppleWebKit/537.36(KHTML,likeGecko)Chrome/46.0.2478.0Safari/537.36accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8cache-control:no-cachecookie:…

Page 51: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://www.flickr.com/photos/40987321@N02/5580348753/

Page 52: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP response

Page 53: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1200OKContent-Type:text/plain

Content

Page 54: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1200OKDate:Sun,16Aug201511:21:31GMTContent-Type:text/html;charset=utf-8Transfer-Encoding:chunkedConnection:keep-aliveCache-Control:must-revalidate,no-cache,no-store,post-check=0,pre-check=0,privateX-Correlation-Id:...expires:Thu,19Nov198108:52:00GMTpragma:no-cacheX-UA-Compatible:IE=EdgeX-Frame-Options:SAMEORIGINP3P:CP="..."X-Content-Type-Options:nosniffX-XSS-Protection:1;mode=blockStrict-Transport-Security:max-age=7200Content-Security-Policy:…Content-Encoding:gzip

Page 55: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/2

Page 56: Http:2.0 101 introduction (workshop) - Bastian Hofmann

For the user it works the same

Page 57: Http:2.0 101 introduction (workshop) - Bastian Hofmann

No changes in Headers,

Semantics etc

Page 58: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Almost no changes in Headers,

Semantics etc

Page 59: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Protocol (h2) is established during

TLS handshake

Page 60: Http:2.0 101 introduction (workshop) - Bastian Hofmann

:authority:www.researchgate.net:method:GET:path:/:scheme:https

:status:200Content-Type:text/plain

Content

Page 61: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Changes on transport level

Page 62: Http:2.0 101 introduction (workshop) - Bastian Hofmann

TLS only

Page 63: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Binary instead of textual

Page 64: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Multiple requests are multiplexed over one TCP connection

Page 65: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Server Push

Page 66: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Header compression

Page 67: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Smaller requests and responses

Page 68: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Less roundtrips

Page 69: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Headers are received early

(1st packet)

Page 70: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP Response body

Page 71: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTML response

Page 72: Http:2.0 101 introduction (workshop) - Bastian Hofmann

DOM parsing

Page 73: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Rendering

Page 74: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 75: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Asset fetching

Page 76: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Applying CSS

Page 77: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Executing JS

Page 78: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://www.flickr.com/photos/hangdog/10991275/

Page 79: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Blocking HTML rendering

Page 80: Http:2.0 101 introduction (workshop) - Bastian Hofmann

CSS

Page 81: Http:2.0 101 introduction (workshop) - Bastian Hofmann

JS

Page 82: Http:2.0 101 introduction (workshop) - Bastian Hofmann

CSS triggers repaints

Page 83: Http:2.0 101 introduction (workshop) - Bastian Hofmann

JS can manipulate the DOM

Page 84: Http:2.0 101 introduction (workshop) - Bastian Hofmann

JS can access attributes set by

CSS

Page 85: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1 200 OKContent-Type: text/html

<html><head> <link href="main.css" >

<link href="profile.css" > <script src="library.js" /> <script src="app.js" /> <script>

// some JS </script>

</head><body>

Page 86: Http:2.0 101 introduction (workshop) - Bastian Hofmann

<script src="demo_async.js" async></script>

Page 87: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Lots of assets

Page 88: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1

Page 89: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Every request one TCP connection

Page 90: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Connection Keep Alive

Page 91: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Network congestion

Page 92: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Concurrent connection limits

Page 93: Http:2.0 101 introduction (workshop) - Bastian Hofmann

http://www.browserscope.org/?category=network

Page 94: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Domain sharding

Page 95: Http:2.0 101 introduction (workshop) - Bastian Hofmann

http://c5.rgstatic.net/profile.css

http://c4.rgstatic.net/icon.png

Page 96: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Shards should be persistent

Page 97: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Additional handshakes and

connections

Page 98: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Network congestion

Page 99: Http:2.0 101 introduction (workshop) - Bastian Hofmann

TCP Slow Start

Page 100: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://de.wikipedia.org/wiki/Transmission_Control_Protocol#/media/File:TCPSlowStartundCongestionAvoidance.svg

Page 101: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Ideal number of shards

Page 102: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://codeascraft.com/2014/02/19/reducing-domain-sharding/

Page 103: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Page sizes

Page 104: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Less content

Page 105: Http:2.0 101 introduction (workshop) - Bastian Hofmann

GZIP

Page 106: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Image compression

Page 107: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Minification

Page 108: Http:2.0 101 introduction (workshop) - Bastian Hofmann

JS

Page 109: Http:2.0 101 introduction (workshop) - Bastian Hofmann

CSS

Page 110: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTML

Page 111: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Debugging problems

Page 112: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 113: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Sourcemaps

Page 114: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Less requests

Page 115: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Concatenation

Page 116: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://c5.rgstatic.net/c/a9b943a25d126865806885d2fd94b5f9/javascript/combo/lib/yui3/array-extras/array-extras-min.js&lib/yui3/oop/oop-min.js&lib/yui3/attribute-core/attribute-core-min.js&lib/yui3/event-custom-base/event-custom-base-min.js&lib/yui3/event-custom-complex/event-custom-complex-min.js&lib/yui3/attribute-observable/attribute-observable-

min.js&lib/yui3/attribute-extras/attribute-extras-min.js&lib/yui3/attribute-base/attribute-base-min.js&lib/yui3/attribute-complex/attribute-complex-min.js&lib/yui3/base-core/base-core-

min.js&lib/yui3/base-observable/base-observable-min.js&lib/yui3/base-base/base-base-min.js&lib/yui3/pluginhost-base/pluginhost-base-min.js&lib/yui3/pluginhost-config/pluginhost-config-min.js&lib/yui3/base-pluginhost/base-pluginhost-min.js&lib/yui3/classnamemanager/

classnamemanager-min.js&lib/yui3/dom-core/dom-core-min.js&lib/yui3/dom-base/dom-base-min.js&lib/yui3/selector-native/selector-native-min.js&lib/yui3/selector/selector-min.js&lib/

yui3/node-core/node-core-min.js

Page 117: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://c5.rgstatic.net/c/a9b943a25d126865806885d2fd94b5f9/mainbundle.js

Page 118: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Spritemaps

Page 119: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 120: Http:2.0 101 introduction (workshop) - Bastian Hofmann

How to bundle

Page 121: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Over fetching

Page 122: Http:2.0 101 introduction (workshop) - Bastian Hofmann

90% CSS unused

Page 123: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Cache invalidation

Page 124: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Under fetching

Page 125: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/2

Page 126: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Only 1 connection

Page 127: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Fully multiplexed

Page 128: Http:2.0 101 introduction (workshop) - Bastian Hofmann

No domain sharding needed

Page 129: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Low overhead for a request

Page 130: Http:2.0 101 introduction (workshop) - Bastian Hofmann

No concatenation

needed

Page 131: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Better cache hit ratio

Page 132: Http:2.0 101 introduction (workshop) - Bastian Hofmann

More granular loading

Page 133: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Less development

overhead

Page 134: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 135: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://www.flickr.com/photos/ksayer/5614813296/

Page 136: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Critical rendering path

Page 137: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 138: Http:2.0 101 introduction (workshop) - Bastian Hofmann

What is visible?

Page 139: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 140: Http:2.0 101 introduction (workshop) - Bastian Hofmann

What is critical?

Page 141: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 142: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1

Page 143: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Inline critical assets

Page 144: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Either inline always

Page 145: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Caching?

Page 146: Http:2.0 101 introduction (workshop) - Bastian Hofmann

First request

Page 147: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1 200 OKContent-Type: text/html

<html><head> <styles> … your critical css

</styles></head><body>

<div>content</div>load main.css asyncset cookie that other css was loaded

</body></html>

Page 148: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Subsequent request (if Cookie set)

Page 149: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/1.1 200 OKContent-Type: text/html

<html><head> <link href="main.css" >

// loaded from cache</head><body>

<div>content</div></body></html>

Page 150: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Flushing critical stuff early

Page 151: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Traditional approach

Page 152: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Browser Server

GET css & js

HTTP/1.1 200 OKContent-Type: text/html

<html><head><link ..><script ..>

GET /foo.html

</head><body></body></html>

Page 153: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://developer.mozilla.org/en-US/docs/Web/HTTP/Controlling_DNS_prefetching

Page 154: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://developer.mozilla.org/en-US/docs/Web/HTTP/Link_prefetching_FAQ

Page 155: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP supports streaming

Page 156: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Browser ServerGET /foo.html

<body></body></html>

HTTP/1.1 200 OKContent-Type: text/html

<html><head><link ..><script ..></head>

GET css & js

Page 157: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 158: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Problems

Page 159: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Headers are already sent

Page 160: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Redirects

Page 161: Http:2.0 101 introduction (workshop) - Bastian Hofmann

<script>window.location="...";</script>

Page 162: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 163: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Proxies, servers, load balancers

may buffer content

Page 164: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Browsers may wait before

starting to render HTML

Page 165: Http:2.0 101 introduction (workshop) - Bastian Hofmann

AJAX?

Page 166: Http:2.0 101 introduction (workshop) - Bastian Hofmann

JSON

Page 167: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 168: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Caching what assets are needed

Page 169: Http:2.0 101 introduction (workshop) - Bastian Hofmann

GET/literature.AddPublicationsDialog

HTTP/1.1200OKContent-Type:application/json

{"data":{...},"css":["AddPublicationsDialog.css"],"js":["AddPublicationsDialogView.js"],"html":["addConferencePaperSelection.html"]}

Page 170: Http:2.0 101 introduction (workshop) - Bastian Hofmann

localStorage.setItem("literature.AddPublicationsDialog",{"css":["AddPublicationsDialog.css"],"js":["AddPublicationsDialogView.js"],"html":["addConferencePaperSelection.html"]});

Page 171: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 172: Http:2.0 101 introduction (workshop) - Bastian Hofmann
Page 173: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HTTP/2

Page 174: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Server push

Page 175: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Prioritize critical assets

Page 176: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Browser Server

Push CSS & JS

:status: 200Content-Type: text/html

<html><head><link ..><script ..></head><body></body></html>

GET /foo.html

Page 177: Http:2.0 101 introduction (workshop) - Bastian Hofmann

spdy.createServer(options, function(req, res) {

// push JavaScript asset (/main.js) to the client res.push( '/main.js', {'content-type': ‚application/javascript'}, function(err, stream) { stream.end('alert("hello from push stream!")'); } );

// write main response body and terminate stream res.end( 'Hello World! <script src=„/main.js"></script>' );

}).listen(443);

https://www.igvita.com/2013/06/12/innovating-with-http-2.0-server-push/

Page 178: Http:2.0 101 introduction (workshop) - Bastian Hofmann

HeadersX-Associated-Content

Page 179: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Automated learning

Page 180: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Great

Page 181: Http:2.0 101 introduction (workshop) - Bastian Hofmann

When can I use it?

Page 182: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Browser support

Page 183: Http:2.0 101 introduction (workshop) - Bastian Hofmann

http://caniuse.com/#feat=http2

Page 184: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Server support

Page 185: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Nginxhttps://www.nginx.com/blog/nginx-1-9-5/

Page 186: Http:2.0 101 introduction (workshop) - Bastian Hofmann

https://httpd.apache.org/docs/2.4/mod/mod_http2.html

Apache httpd

Page 187: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Who is using it already?

Page 188: Http:2.0 101 introduction (workshop) - Bastian Hofmann

chrome://net-internals/#http2

Page 189: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Performance best practices will

evolve

Page 190: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Monitor and test

Page 191: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Expect more frequent HTTP

protocol iterations

Page 192: Http:2.0 101 introduction (workshop) - Bastian Hofmann

Stay up to date

Page 193: Http:2.0 101 introduction (workshop) - Bastian Hofmann

http://twitter.com/BastianHofmann http://lanyrd.com/people/BastianHofmann http://speakerdeck.com/u/bastianhofmann

[email protected]