Golang 1.17是否支持HTTP2代理?

Golang 1.17是否支持HTTP2代理?

  • Go 1.17 更新后是否支持 HTTP2 代理?
2 回复

这个问题:https://github.com/golang/go/issues/26479 似乎是在请求 HTTP2 代理支持,并且截至 2021 年 6 月 11 日它仍然处于开放状态,因此我认为目前还不支持 HTTP2 代理。

更多关于Golang 1.17是否支持HTTP2代理?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


是的,Go 1.17 支持 HTTP/2 代理。从 Go 1.17 开始,标准库的 net/http 包已经支持通过 HTTP/2 代理进行通信。这包括使用 https:// 协议的代理服务器。

以下是一个使用 HTTP/2 代理的示例代码:

package main

import (
    "crypto/tls"
    "fmt"
    "net/http"
    "net/url"
    "time"
)

func main() {
    // 设置代理 URL,这里使用一个假设的 HTTP/2 代理服务器
    proxyURL, err := url.Parse("https://proxy.example.com:443")
    if err != nil {
        panic(err)
    }

    // 创建自定义传输层,配置代理
    transport := &http.Transport{
        Proxy: http.ProxyURL(proxyURL),
        TLSClientConfig: &tls.Config{
            MinVersion: tls.VersionTLS12, // HTTP/2 需要 TLS 1.2 或更高版本
        },
        ForceAttemptHTTP2: true, // 强制尝试 HTTP/2
    }

    // 创建 HTTP 客户端
    client := &http.Client{
        Transport: transport,
        Timeout:   10 * time.Second,
    }

    // 发送请求
    resp, err := client.Get("https://httpbin.org/get")
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    fmt.Printf("响应协议: %s\n", resp.Proto) // 应该输出 HTTP/2.0
}

需要注意的是:

  1. 代理服务器必须支持 HTTP/2 协议
  2. 如果代理使用自签名证书,需要在 TLSClientConfig 中适当配置 InsecureSkipVerify
  3. 确保代理 URL 使用正确的端口(通常 HTTPS 代理使用 443 端口)

这个功能在 Go 1.17 中是稳定可用的,不需要额外的第三方库。

回到顶部