mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
836e641229
Former-commit-id: 0bc9c92c519edda9e04be8481e16fd2fdcfc74c0
41 lines
1.3 KiB
Go
41 lines
1.3 KiB
Go
// Server push lets the server preemptively "push" website assets
|
||
// to the client without the user having explicitly asked for them.
|
||
// When used with care, we can send what we know the user is going
|
||
// to need for the page they’re requesting.
|
||
package main
|
||
|
||
import "github.com/kataras/iris/v12"
|
||
|
||
func main() {
|
||
app := iris.New()
|
||
app.Get("/", pushHandler)
|
||
app.Get("/main.js", simpleAssetHandler)
|
||
|
||
app.Run(iris.TLS("127.0.0.1:443", "mycert.crt", "mykey.key"))
|
||
// $ openssl req -new -newkey rsa:4096 -x509 -sha256 \
|
||
// -days 365 -nodes -out mycert.crt -keyout mykey.key
|
||
}
|
||
|
||
func pushHandler(ctx iris.Context) {
|
||
// The target must either be an absolute path (like "/path") or an absolute
|
||
// URL that contains a valid host and the same scheme as the parent request.
|
||
// If the target is a path, it will inherit the scheme and host of the
|
||
// parent request.
|
||
target := "/main.js"
|
||
err := ctx.ResponseWriter().Push(target, nil)
|
||
if err != nil {
|
||
if err == iris.ErrPushNotSupported {
|
||
ctx.StopWithText(iris.StatusHTTPVersionNotSupported, "HTTP/2 push not supported.")
|
||
} else {
|
||
ctx.StopWithError(iris.StatusInternalServerError, err)
|
||
}
|
||
return
|
||
}
|
||
|
||
ctx.HTML(`<html><body><script src="%s"></script></body></html>`, target)
|
||
}
|
||
|
||
func simpleAssetHandler(ctx iris.Context) {
|
||
ctx.ServeFile("./public/main.js")
|
||
}
|