HTTP/2 Server Push
24 Mar 2017
Tags: http, technical

Jaana Burcu Dogan, Tom Bergan

* Introduction

HTTP/2 is designed to address many of the failings of HTTP/1.x.
Modern web pages use many resources: HTML, stylesheets,
scripts, images, and so on. In HTTP/1.x, each of these resources must
be requested explicitly. This can be a slow process.
The browser starts by fetching the HTML, then learns of more resources
incrementally as it parses and evaluates the page. Since the server
must wait for the browser to make each request, the network is often
idle and underutilized.

To improve latency, HTTP/2 introduced _server_push_, which allows the
server to push resources to the browser before they are explicitly
requested. A server often knows many of the additional resources a
page will need and can start pushing those resources as it responds
to the initial request. This allows the server to fully utilize an
otherwise idle network and improve page load times.

.image h2push/serverpush.svg _ 600

At the protocol level, HTTP/2 server push is driven by `PUSH_PROMISE`
frames. A `PUSH_PROMISE` describes a request that the server predicts the
browser will make in the near future. As soon as the browser receives
a `PUSH_PROMISE`, it knows that the server will deliver the resource.
If the browser later discovers that it needs this resource, it will
wait for the push to complete rather than sending a new request.
This reduces the time the browser spends waiting on the network.

* Server Push in net/http

Go 1.8 introduced support for pushing responses from an [[https://golang.org/pkg/net/http/#Server][`http.Server`]].
This feature is available if the running server is an HTTP/2 server
and the incoming connection uses HTTP/2. In any HTTP handler,
you can assert if the http.ResponseWriter supports server push by checking
if it implements the new [[https://golang.org/pkg/net/http/#Pusher][`http.Pusher`]] interface.

For example, if the server knows that `app.js` will be required to
render the page, the handler can initiate a push if `http.Pusher`
is available:

.code h2push/pusher.go /START/,/END/

The Push call creates a synthetic request for `/app.js`,
synthesizes that request into a `PUSH_PROMISE` frame, then forwards
the synthetic request to the server's request handler, which will
generate the pushed response. The second argument to Push specifies
additional headers to include in the `PUSH_PROMISE`. For example,
if the response to `/app.js` varies on Accept-Encoding,
then the `PUSH_PROMISE` should include an Accept-Encoding value:

.code h2push/pusher.go /START1/,/END1/

A fully working example is available at:

	$ go get golang.org/x/blog/content/h2push/server

If you run the server and load [[https://localhost:8080][https://localhost:8080]],
your browser's developer tools should show that `app.js` and
`style.css` were pushed by the server.

.image h2push/networktimeline.png _ 605

* Start Your Pushes Before You Respond

It's a good idea to call the Push method before sending any bytes
of the response. Otherwise it is possible to accidentally generate
duplicate responses. For example, suppose you write part of an HTML
response:

	<html>
	<head>
		<link rel="stylesheet" href="a.css">...

Then you call Push("a.css", nil). The browser may parse this fragment
of HTML before it receives your PUSH_PROMISE, in which case the browser
will send a request for `a.css` in addition to receiving your
`PUSH_PROMISE`. Now the server will generate two responses for `a.css`.
Calling Push before writing the response avoids this possibility entirely.

* When To Use Server Push

Consider using server push any time your network link is idle.
Just finished sending the HTML for your web app? Don't waste time waiting,
start pushing the resources your client will need. Are you inlining
resources into your HTML file to reduce latency? Instead of inlining,
try pushing. Redirects are another good time to use push because there
is almost always a wasted round trip while the client follows the redirect.
There are many possible scenarios for using push -- we are only getting started.

We would be remiss if we did not mention a few caveats. First, you can only
push resources your server is authoritative for -- this means you cannot
push resources that are hosted on third-party servers or CDNs. Second,
don't push resources unless you are confident they are actually needed
by the client, otherwise your push wastes bandwidth. A corollary is to
avoid pushing resources when it's likely that the client already has
those resources cached. Third, the naive approach of pushing all
resources on your page often makes performance worse. When in doubt, measure.

The following links make for good supplemental reading:

- [[https://calendar.perfplanet.com/2016/http2-push-the-details/][HTTP/2 Push: The Details]]
- [[https://www.igvita.com/2013/06/12/innovating-with-http-2.0-server-push/][Innovating with HTTP/2 Server Push]]
- [[https://github.com/h2o/h2o/issues/421][Cache-Aware Server Push in H2O]]
- [[https://developers.google.com/web/fundamentals/performance/prpl-pattern/][The PRPL Pattern]]
- [[https://docs.google.com/document/d/1K0NykTXBbbbTlv60t5MyJvXjqKGsCVNYHyLEXIxYMv0][Rules of Thumb for HTTP/2 Push]]
- [[https://tools.ietf.org/html/rfc7540#section-8.2][Server Push in the HTTP/2 spec]]

* Conclusion

With Go 1.8, the standard library provides out-of-the-box support for HTTP/2
Server Push, giving you more flexibility to optimize your web applications.

Go to our [[https://http2.golang.org/serverpush][HTTP/2 Server Push demo]]
page to see it in action.
