这篇文章将为大家详细讲解有关去语言的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服务器功能及客户端使用方法是什么