blob: 8eb842a7f030854c0c36cd93e26bb6c29ebcac15 [file] [log] [blame]
// Copyright 2017 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// +build go1.8
// The server command demonstrates a server with HTTP/2 Server Push support.
package main
import (
var httpAddr = flag.String("http", ":8080", "Listen address")
func main() {
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
pusher, ok := w.(http.Pusher)
if ok {
// Push is supported. Try pushing rather than
// waiting for the browser request these static assets.
if err := pusher.Push("/static/app.js", nil); err != nil {
log.Printf("Failed to push: %v", err)
if err := pusher.Push("/static/style.css", nil); err != nil {
log.Printf("Failed to push: %v", err)
fmt.Fprintf(w, indexHTML)
log.Fatal(http.ListenAndServeTLS(*httpAddr, "cert.pem", "key.pem", nil))
const indexHTML = `<html>
<title>Hello World</title>
<script src="/static/app.js"></script>
<link rel="stylesheet" href="/static/style.css"">
Hello, gopher!