diff options
Diffstat (limited to 'docs/content/en/news/http2-server-push-in-hugo.md')
-rw-r--r-- | docs/content/en/news/http2-server-push-in-hugo.md | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/docs/content/en/news/http2-server-push-in-hugo.md b/docs/content/en/news/http2-server-push-in-hugo.md new file mode 100644 index 000000000..5ffb8843f --- /dev/null +++ b/docs/content/en/news/http2-server-push-in-hugo.md @@ -0,0 +1,79 @@ +--- +title: "HTTP/2 Server Push in Hugo" +date: 2017-07-24T18:36:00+02:00 +description: > + As every page in Hugo can be output to multiple formats, it is easy to create Netlify's _redirects and _headers files on the fly. +categories: [blog] +keywords: [] +slug: "http2-server-push-in-hugo" +aliases: [] +author: bep +images: +- images/gohugoio-card-1.png +--- + +**Netlify** recently announced support for [HTTP/2 server push](https://www.netlify.com/blog/2017/07/18/http/2-server-push-on-netlify/), and we have now added it to the **gohugo.io** sites for the main `CSS` and `JS` bundles, along with server-side 301 redirect support. + +If you navigate to https://gohugo.io and look in the Chrome developer network console, you should now see `Push` as the new source ("Initiator") for the `CSS` and `JSS`: + +{{< figure src="/images/blog/hugo-http2-push.png" caption="Network log for https://gohugo.io" >}} + +**Setting up this in Hugo was easy:** + +## 1. Configure Netlify Output Formats + +Add a new custom media type and two new output formats to `config.toml`. For more on output formats in Hugo, see [Custom Output Formats](/templates/output-formats/). +```bash +[outputs] +home = [ "HTML", "RSS", "REDIR", "HEADERS" ] + +[mediaTypes] +[mediaTypes."text/netlify"] +suffix = "" +delimiter = "" + +[outputFormats] +[outputFormats.REDIR] +mediatype = "text/netlify" +baseName = "_redirects" +isPlainText = true +notAlternative = true +[outputFormats.HEADERS] +mediatype = "text/netlify" +baseName = "_headers" +isPlainText = true +notAlternative = true +``` +## 2. Add Template For the _headers File + +Add `layouts/index.headers`: + +```bash +/* + X-Frame-Options: DENY + X-XSS-Protection: 1; mode=block + X-Content-Type-Options: nosniff + Referrer-Policy: origin-when-cross-origin +*/ + Link: <{{ "dist/app.bundle.js" | relURL }}>; rel=preload; as=script + Link: <{{ "dist/main.css" | relURL }}>; rel=preload; as=style +``` +The template above creates both a security header definition and a HTTP/2 server push configuration. + +Also note that this is a template for the home page, so the full `Page` with its `Site` and many variables are available. You can also use `partial` to include other templates. + + + + +## 3. Add Template For the _redirects File +Add `layouts/index.redir`: +```bash +# Netlify redirects. See https://www.netlify.com/docs/redirects/ +{{ range $p := .Site.Pages -}} +{{ range .Aliases }} +{{ . | printf "%-35s" }} {{ $p.RelPermalink -}} +{{ end -}} +{{- end -}} +``` +The template above creates 301 redirects for your [aliases](/content-management/urls/#aliases), so you will probably want to turn off aliases in your `config.toml`: `disableAliases = true`. + |