To install

You need a relatively recent version of node (eg 7.9.0, but may work in earlier versions).

npm install

To run

Ensure cert/certificate.pem is trusted by the browser. The best way to do this is to add it to the OS keychain. However, you should remove/disable it after testing, as the private key is in this repo.

npm run dev

This will set up an HTTP/2 HTTPS server on port 3001. Edit index.js if you want to change the port.

/

This slowly pushes /data which contains 4 random numbers, and has max-age=3000.

/data, if requested from the server, returns "NOT FROM PUSH".

The page contains various ways to fetch /data, or refetch the page itself.

/no-cache/

As /, but the pushed resource has no-cache rather than max-age.

/no-store/

As /, but the pushed resource has no-store rather than max-age.

/img/

This slowly pushes /img/cat.svg and has max-age=3000.

/img/cat.svg, if requested from the server, is a 404.

/cross-origin-push/

This slowly pushes 4 random numbers to https://www.example.com:3001/, and has max-age=3000. www.example.com is a SAN, so the push should work.

The page contains button to fetch https://www.example.com:3001/, which won't pick up the pushed resource unless you use your hosts file to make example.com resolve to 127.0.0.1.

/vary-cookie/

This slowly pushes 4 random numbers. The push's request has Cookie: val=a, and the response has Vary: Cookie. Buttons on the page allow you to set the cookie.

/push-post/

This slowly pushes 4 random numbers. The push's request has a method of POST.

/preload-fetch/

Uses <link rel="preload"> to preload /preload-fetch/data.

/preload-img/

Uses <link rel="preload"> to preload /preload-img/cat.svg.

/preload-and-push/

Pushes /preload-and-push/data, but also has a Link rel=preload header for the same resource.

/preload-and-push/img/

As above, but pushes and preloads /preload-and-push/img/cat.svg.