在Go中使用FileServer提供静态文件时使用HTTP Server推送

时间:2019-06-30 20:00:33

标签: go http2 server-push

在Go中提供静态文件非常简单:

import (
  "log"
  "net/http"
)

func main() {
  fs := http.FileServer(http.Dir("static"))
  http.Handle("/", fs)

  log.Println("Listening...")
  http.ListenAndServe(":3000", nil)
}

但是在我的项目中,当用户请求HTML文件时,我需要为相关文件安装Server Push。在我的Java实现中,我有一个.link文件,其中列出了链接文件。例如:

index.html:

<html>
   <head>
       <link rel="stylesheet" type="text/css" href="/style.css" >
   </head>
   <body>
       <img src="/sample.png">
   </body>
</html>

index.html.link:

/sample.png
/style.css

当客户端要求提供 index.html 时,服务器将检查 index.html.link 是否存在,并且客户端支持http2 Server push,它将推送列在其中的文件 *。link 文件 如何使用FileServer实现这种功能以保持简单?

或者作为另一种选择,我可以使用Nginx反向代理,并按照here的说明向响应添加Link标头。

Link: </style.css>; as=style; rel=preload
Link: </sample.png>; as=image; rel=preload

还是有更好的解决方案?

0 个答案:

没有答案