Golang 2.0会用HTTP 2.0替代HTTP 1.1吗?
Golang 2.0会用HTTP 2.0替代HTTP 1.1吗? 既然我们已经有了HTTP 2.0协议并且它正逐渐普及,那么Go 2.0或未来其他版本的Go在其net/http包中实现HTTP 2.0协议的可能性有多大?
net/http 已经实现了 HTTP 2.0
http 包的 Transport 和 Server 都会为简单配置自动启用 HTTP/2 支持。要为更复杂的配置启用 HTTP/2,使用较低级别的 HTTP/2 功能,或使用更新版本的 Go http2 包,请直接导入 “golang.org/x/net/http2” 并使用其 ConfigureTransport 和/或 ConfigureServer 函数。通过 golang.org/x/net/http2 包手动配置 HTTP/2 将优先于 net/http 包内置的 HTTP/2 支持。
来自:http package - net/http - Go Packages
另外 Go 2.0 并非实际存在的版本,更多是关于如何扩展语言的概念集合。
更多关于Golang 2.0会用HTTP 2.0替代HTTP 1.1吗?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,net/http包已经支持HTTP/2协议,并且从Go 1.6版本开始默认启用,前提是服务器使用TLS(HTTPS)。因此,对于Go 2.0或未来版本,HTTP/2的支持已经存在,无需替代HTTP/1.1,而是作为兼容性增强。以下是简要说明和示例代码。
当前Go对HTTP/2的支持
- 在Go 1.6及以上版本中,当使用HTTPS时,
net/http服务器会自动启用HTTP/2。HTTP/1.1仍然保留,以确保向后兼容。 - 对于HTTP(非加密连接),HTTP/2可以通过
golang.org/x/net/http2包手动启用,但这不是默认行为,因为HTTP/2规范推荐使用TLS。
示例代码:启用HTTP/2的Go服务器
以下是一个简单的Go HTTP服务器示例,它使用TLS并自动支持HTTP/2。假设你有一个有效的TLS证书和密钥文件(例如cert.pem和key.pem)。
package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, you're using protocol: %s\n", r.Proto)
})
// 使用TLS启用HTTP/2。确保cert.pem和key.pem文件存在。
log.Println("Starting HTTPS server on :443 with HTTP/2 support...")
err := http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)
if err != nil {
log.Fatal("ListenAndServeTLS: ", err)
}
}
运行此服务器后,客户端通过HTTPS连接时,将自动使用HTTP/2协议(如果客户端支持)。你可以使用工具如curl测试协议版本:
curl -I --http2 https://localhost
未来展望
对于Go 2.0或后续版本,HTTP/2的支持可能会进一步优化,但不会移除HTTP/1.1,因为许多现有系统仍依赖它。Go团队通常会保持向后兼容,因此HTTP/1.1将继续作为备选协议。
总之,Go语言已经实现了HTTP/2,无需等待未来版本。如果你在项目中需要HTTP/2,请确保使用Go 1.6或更高版本,并配置TLS。

