the code goes like following
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
pusher, ok := w.(http.Pusher)
if ok {
// Push the resource to the client
if err := pusher.Push("/styles.css", nil); err != nil {
log.Printf("Failed to push: %v", err)
}
if err := pusher.Push("/app.js", nil); err != nil {
log.Printf("Failed to push: %v", err)
}
}
// Return HTML response
w.Header().Set("Content-Type", "text/html; charset=utf-8")
fmt.Fprintf(w, "<html><head><title>HTTP/2 Push Example</title><link rel=\"stylesheet\" href=\"/styles.css\"><script src=\"/app.js\"></script></head><body><h1>Hello, HTTP/2 Push!</h1></body></html>")
})
log.Println("HTTP server listening on :8080")
log.Fatal(http.ListenAndServeTLS(":8080", "server.crt", "server.key", nil))
}
And the app.js is console.log("Hello http2!")
But when I use chrome to visit https://localhost:8080
what was shown in the app.js file is something like following:
<html><head><title>HTTP/2 Push Example</title><link rel=\"stylesheet\" href=\"/styles.css\"><script src=\"/app.js\"></script></head><body><h1>Hello, HTTP/2 Push!</h1></body></html>
So what’s going on?
And more interesting, if I just use the gin’s example of http2 push, it just work as it should be.