Skip to content

Instantly share code, notes, and snippets.

@rakyll

rakyll/main.go Secret

Last active February 15, 2026 01:11
Show Gist options
  • Select an option

  • Save rakyll/eec415977f85d50a493ca8472ba97b68 to your computer and use it in GitHub Desktop.

Select an option

Save rakyll/eec415977f85d50a493ca8472ba97b68 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"log"
"net/http"
)
const mainJS = `console.log("hello world");`
const indexHTML = `<html>
<head>
<title>Hello</title>
<script src="/main.js"></script>
</head>
<body>
</body>
</html>
`
func main() {
http.HandleFunc("/main.js", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, mainJS)
})
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
pusher, ok := w.(http.Pusher)
if ok { // Push is supported. Try pushing rather than waiting for the browser.
if err := pusher.Push("/main.js", nil); err != nil {
log.Printf("Failed to push: %v", err)
}
}
fmt.Fprintf(w, indexHTML)
})
// Run crypto/tls/generate_cert.go to generate cert.pem and key.pem.
// See https://golang.org/src/crypto/tls/generate_cert.go
log.Fatal(http.ListenAndServeTLS(":7072", "cert.pem", "key.pem", nil))
}
@HyeJong

HyeJong commented Nov 30, 2016

Copy link
Copy Markdown

Thanks a lot!

@vsouza

vsouza commented Dec 13, 2016

Copy link
Copy Markdown

thanks!

@peeyushsrj

Copy link
Copy Markdown

Thanks!

@dreambo8563

Copy link
Copy Markdown

I run the code locally, but I didn't see "push" in my console

@m90

m90 commented Jun 18, 2018

Copy link
Copy Markdown

As of today (18.06.2018), this does not seem to work in Chrome (v67) when it does work in Firefox (v60).

Strangely the .(http.Pusher) assertion succeeds and the .Push calls don't return errors, but Chrome will simply request each resource on a new request. Firefox only performs a single request.

Strangely https://http2.golang.org/serverpush still seems to work in all browsers.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment