去语言的http/2服务器功能及客户端使用方法是什么

  介绍

这篇文章将为大家详细讲解有关去语言的http/2服务器功能及客户端使用方法是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

大家都知道,走的标准库http服务器默认支持http/2。那么,在这篇文章中,我们将首先展示的http/2服务器功能,并解释如何将它们作为客户端使用。

在这篇文章中,我们将首先展示的http/2服务器功能,并解释如何将它们作为客户端使用.Go的标准库http服务器默认支持http/2 .

下面话不多说了,来一起看看详细的介绍吧

首先,让我们在去中创建一个http/2服务器!根据http/2文档,所有东西都是为我们自动配置的,我们甚至不需要导入去的标准库http2包:

http/2强制使用TLS。为了实现这一点,我们首先需要一个私钥和一个证书。在Linux上、下面的命令执行这个任务。

 openssl点播newkey rsa: 2048节点-keyout服务器。关键x509 365天两级服务器。crt 


现在,对于服务器代码,以最简单的形式,我们将使用去的标准库HTTP服务器,并启用TLS与生成的SSL文件。

主要包
  
  导入(
  “log"
  “;net/http"
  )
  
  函数main () {//在8000端口启动服务器//确切地说,如何运行HTTP/1.1服务器。
  
  srv:=, http.Server {Addr:“: 8000“,处理程序:http.HandlerFunc(处理)}//用TLS启动服务器,因为我们运行的是http/2,它必须是与TLS一起运行。//确切地说,如何使用TLS连接运行HTTP/1.1服务器。
  主要log.Printf(“服务>包
  
  导入(
  “fmt"
  “;net/http"
  )
  
  const url=癶ttps://localhost: 8000“;
  
  函数main () {
  _,犯错:=http.Get (url)
  fmt.Println (err)
  }

让我们试着运行它:

美元去h3-client.go运行
  得到https://localhost: 8000: x509:未知签署的证书权威

在服务器日志中,我们还将看到客户端(远程)有一个错误:

http: TLS握手错误从[::1]:58228:远程错误:TLS:坏证书

为了解决这个问题,我们可以用定制的TLS配置去配置我们的客户端。我们将把服务器证书文件添加到客户端”证书池”中,因为我们信任它,即使它不是由已知CA签名的。

我们还将添加一个选项,根据命令行标志在http/1.1和http/2传输之间进行选择。

主要包
  
  导入(
  “加密/tls"
  “加密/x509"
  “flag"
  “fmt"
  “io/ioutil"
  “log"
  “;net/http"
  “;golang.org/x/net/http2"
  )
  
  const url=癶ttps://localhost: 8000“;
  
  var httpVersion=flag.Int (“version" 2“HTTP version")
  
  函数main () {
  flag.Parse ()
  客户:=,http.Client {}//创建一个池服务器证书,因为它不是签署//通过一个已知的CA
  caCert犯错:=ioutil.ReadFile (“server.crt")
  如果犯错!=nil {
  log.Fatalf(“阅读服务器证书:% s",犯错)
  }
  caCertPool:=x509.NewCertPool ()
  caCertPool.AppendCertsFromPEM (caCert)//创建TLS配置服务器的证书
  tlsConfig:=, tls.Config {
  还:caCertPool,
  }//在客户端使用适当的运输
  开关* httpVersion {
  案例1:
  客户端。运输=,http.Transport {
  TLSClientConfig: tlsConfig,
  }
  案例2:
  客户端。运输=,http2.Transport {
  TLSClientConfig: tlsConfig,
  }
  }//执行请求
  分别地,犯错:=client.Get (url)
  
  如果犯错!=nil {
  log.Fatalf(“失败:% s",犯错)
  }
  推迟resp.Body.Close ()
  身体,犯错:=ioutil.ReadAll (resp.Body)
  如果犯错!=nil {
  log.Fatalf(“失败的阅读反应身体:% s",犯错)
  }
  fmt.Printf (
  “有反应% d: % s % s \ n"
  分别地。StatusCode,分别地。原型,字符串(身体)
  )
  }

这一次我们得到了正确的回应:

美元去h3-client.go运行
  200年有反应:HTTP/2.0你好

在服务器日志中,我们将看到正确的日志线:获得连接:连接:HTTP/2.0 ! !
但是当我们尝试使用HTTP/1.1传输时,会发生什么呢?

美元去h3-client运行。- version 1
  响应200:HTTP/1.1你好

我们的服务器对HTTP/2没有任何特定的东西,所以它支持HTTP/1.1连接。这对于向后兼容性很重要。此外,服务器日志表明连接是HTTP/1.1:连接:HTTP/1.1 .

我们创建了一个HTTP/2客户机——服务器连接,并且我们正在享受安全有效的连接带来的好处。但是HTTP/2提供了更多的特性,让我们来研究它们!

去语言的http/2服务器功能及客户端使用方法是什么