gpt4 book ai didi

go - 如何让用 Golang 编写的 My Web Server 支持 HTTP/2 服务器推送?

转载 作者:IT王子 更新时间:2023-10-29 01:26:23 26 4
gpt4 key购买 nike

我的 Web 服务器是用 Golang 编写的,并且支持 HTTPS。我希望在 Web 服务器中利用 HTTP/2 服务器推送功能。以下链接解释了如何将 HTTP 服务器转换为支持 HTTP/2:- https://www.ianlewis.org/en/http2-and-go
但是,目前尚不清楚如何在Golang中实现服务器推送通知。
- 我应该如何添加服务器推送功能?
- 如何控制或管理要推送的文档和文件?

最佳答案

Go 1.7 及更早版本不支持标准库中的 HTTP/2 服务器推送。将在即将发布的 1.8 版本中添加对服务器推送的支持(请参阅 release notes,预计发布时间为 2 月)。

在 Go 1.8 中,您可以使用新的 http.Pusher接口(interface),由net/http默认的ResponseWriter实现。如果服务器推送不受支持 (HTTP/1) 或不允许(客户端已禁用服务器推送),Pushers Push 方法返回 ErrNotSupported。

例子:

package main                                                                              

import (
"io"
"log"
"net/http"
)

func main() {
http.HandleFunc("/pushed", func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "hello server push")
})

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if pusher, ok := w.(http.Pusher); ok {
if err := pusher.Push("/pushed", nil); err != nil {
log.Println("push failed")
}
}

io.WriteString(w, "hello world")
})

http.ListenAndServeTLS(":443", "server.crt", "server.key", nil)
}

如果你想在 Go 1.7 或更早版本中使用服务器推送,可以使用 golang.org/x/net/http2并直接写入帧。

关于go - 如何让用 Golang 编写的 My Web Server 支持 HTTP/2 服务器推送?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41490374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com