【问题标题】:How can I use HTTP/1.x in client and server如何在客户端和服务器中使用 HTTP/1.x
【发布时间】:2019-06-21 10:38:57
【问题描述】:

我有一个使用 HTTP/2 工作的基本客户端和服务器实现。我想测试服务器是否也可以使用 HTTP/1。

有没有办法将协议从 HTTP/2 更改为 HTTP/1.x?

客户端代码:

func main() {
  host = "https://127.0.0.1:8080"
  client = http.Client{

    // InsecureTLSDial is temporary and will likely be
    // replaced by a different API later.
    Transport: &http2.Transport{
        TLSClientConfig: &tls.Config{
            InsecureSkipVerify: true,
        },
    },
  }

  // further functionality
}

服务器代码:

func main() {

    var srv http.Server
    srv.Addr = ":8080"

    // Set Routes
    routes()

    // Start server
    srv.ListenAndServeTLS("certs/localhost.cert", "certs/localhost.key")
}

【问题讨论】:

  • 您是否尝试过软件包文档开头列出的 2 种方法? golang.org/pkg/net/http
  • @JimB 是的,TLSNextProto 选项对我不起作用。我能够使用 GODEBUG 使服务器在 HTTP/1.x 中工作,但客户端还没有工作
  • 您的客户端明确指定了 HTTP/2 传输,即使这不是您想要的。

标签: http go https


【解决方案1】:

我找到了一个简单的解决方案。

客户端的变化

Transport: &http2.Transport{
    TLSClientConfig: &tls.Config{
        InsecureSkipVerify: true,
    },
},

通过

Transport: &http.Transport{
        TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),
        TLSClientConfig: &tls.Config{
            InsecureSkipVerify: true,
        },
    },

【讨论】:

  • nil 是切片的零值,因此这两个代码段产生完全相同的值。
猜你喜欢
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多