https://commons.wikimedia.org/wiki/File:Internet1.jpg#/media/File:Internet1.jpg
HTTP/0.9http://www.w3.org/Protocols/HTTP/AsImplemented.html
1991
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
HTTP/2http://tools.ietf.org/html/rfc7540http://tools.ietf.org/html/rfc7541
2015
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:…
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
:authority:www.researchgate.net:method:GET:path:/:scheme:https
:status:200Content-Type:text/plain
Content
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>
http://c5.rgstatic.net/profile.css
http://c4.rgstatic.net/icon.png
https://de.wikipedia.org/wiki/Transmission_Control_Protocol#/media/File:TCPSlowStartundCongestionAvoidance.svg
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
https://c5.rgstatic.net/c/a9b943a25d126865806885d2fd94b5f9/mainbundle.js
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>
HTTP/1.1 200 OKContent-Type: text/html
<html><head> <link href="main.css" >
// loaded from cache</head><body>
<div>content</div></body></html>
Browser Server
GET css & js
HTTP/1.1 200 OKContent-Type: text/html
<html><head><link ..><script ..>
GET /foo.html
</head><body></body></html>
https://developer.mozilla.org/en-US/docs/Web/HTTP/Controlling_DNS_prefetching
https://developer.mozilla.org/en-US/docs/Web/HTTP/Link_prefetching_FAQ
Browser ServerGET /foo.html
<body></body></html>
HTTP/1.1 200 OKContent-Type: text/html
<html><head><link ..><script ..></head>
GET css & js
GET/literature.AddPublicationsDialog
HTTP/1.1200OKContent-Type:application/json
{"data":{...},"css":["AddPublicationsDialog.css"],"js":["AddPublicationsDialogView.js"],"html":["addConferencePaperSelection.html"]}
localStorage.setItem("literature.AddPublicationsDialog",{"css":["AddPublicationsDialog.css"],"js":["AddPublicationsDialogView.js"],"html":["addConferencePaperSelection.html"]});
Browser Server
Push CSS & JS
:status: 200Content-Type: text/html
<html><head><link ..><script ..></head><body></body></html>
GET /foo.html
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/
https://httpd.apache.org/docs/2.4/mod/mod_http2.html
Apache httpd
http://twitter.com/BastianHofmann http://lanyrd.com/people/BastianHofmann http://speakerdeck.com/u/bastianhofmann