来在公众号:新世界杂货铺
在HTTP1.x中,访问一个页面,浏览器首先获取HTML资源,然后在解析页面时增量地获取其他资源,服务器必须等待浏览器发出请求后才下发页面内资源。而服务器实际上是知道页面内资源有哪些的,如果服务器能够在浏览器显式请求资源之前就将资源推送到浏览器,页面加载速度将会大大提示,这也是本篇的主旨。
本篇主要分为两个部分,第一部分是用go实现的服务器推送例子,第二部分是自签名证书。为什么会有自签名证书,这里笔者先卖个关子,继续阅读后文将会守得云开见月明。
服务器推送例子
目前仅有HTTP2支持服务器推送,HTTP1.x不支持服务器推送,那我们在代码中应该如何判断当前服务器是否支持推送?
在Go中,我们通过判断http.ResponseWriter
是否实现了http.Pusher
接口就可以知道当前服务器是否支持推送。
下面为笔者写下的第一个服务器推送例子:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
pusher, ok := w.(http.Pusher)
if