Golang简单实现http的server端和client端

 更新时间:2021年06月01日 11:56:15   作者:锐玩道  
Http 服务是基于 Tcp 的应用层的实现,也是最常见的网络协议之一。本文主要介绍了Golang简单实现http的server端和client端,感兴趣的可以了解一下

介绍

HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版,是使用TLS/SSL加密的HTTP协议。

HTTP和HTTPS的区别

  • HTTPS是加密传输协议,HTTP是名文传输协议
  • HTTPS需要用到SSL证书,而HTTP不用
  • HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO
  • HTTPS标准端口443,HTTP标准端口80
  • HTTPS基于传输层,HTTP基于应用层
  • HTTPS在浏览器显示绿色安全锁,HTTP没有显示

1.证书可以认为就是公钥;

2.在Https通信中,需要CA认证中心的证书以及服务器的证书和私钥;

3.服务器的证书是用来发送给客户端的;

4.CA认证中心的证书需要安装在客户机上,用来验证服务器证书的真实性

http server端

http 服务器

package main

import (
 "log"
 "net/http"
 "time"
)

func main() {
 // 创建路由器
 mux := http.NewServeMux()
 // 设置路由规则
 mux.HandleFunc("/hello", sayHello)

 // 创建服务器
 server := &http.Server{
  Addr:         ":1210",
  WriteTimeout: time.Second * 3,
  Handler:      mux,
 }

 // 监听端口并提供服务
 log.Println("starting httpserver at http:localhost:1210")
 log.Fatal(server.ListenAndServe())
}

func sayHello(w http.ResponseWriter, r *http.Request) {
 time.Sleep(1 * time.Second)
 w.Write([]byte("hello hello, this is httpserver"))
}

启动服务器

$ go run demo/base/http/server/server.go
2021/05/31 22:26:35 starting httpserver at http:localhost:1210

使用 浏览器 或者 命令行测试一下:

$ curl -v http://localhost:1210/hello

* Trying ::1:1210...
* Connected to localhost (::1) port 1210 (#0)
> GET /hello HTTP/1.1
> Host: localhost:1210
> User-Agent: curl/7.69.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 31 May 2021 14:28:28 GMT
< Content-Length: 31
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host localhost left intact

hello hello, this is httpserver

如上所示:这就是我们服务端返回的内容 hello hello, this is httpserver

http 客户端

为什么需要客户端

在多项目、微服务的场景下,项目服务之间的互相通信并不像。使用浏览器、命令行输入域名返回结果。所以需要自己编写发起 http 请求的客户端,实现项目服务之间的通信

package main

import (
 "fmt"
 "io/ioutil"
 "net"
 "net/http"
 "time"
)

func main() {
 // 创建连击池
 transport := &http.Transport{
  DialContext: (&net.Dialer{
   Timeout:   30 * time.Second,
   KeepAlive: 30 * time.Second,
  }).DialContext,
  MaxIdleConns:          100,              // 最大空闲连接数
  IdleConnTimeout:       90 * time.Second, // 空闲超时时间
  TLSHandshakeTimeout:   10 * time.Second, // tls 握手超时时间
  ExpectContinueTimeout: 1 * time.Second,  // 100-continue状态码超时时间
 }

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

 // 请求数据
 resp, err := client.Get("http://localhost:1210/hello")

 if err != nil {
  panic(err)
 }
 defer resp.Body.Close()

 // 读取数据
 bds, err := ioutil.ReadAll(resp.Body)
 if err != nil {
  panic(err)
 }
 fmt.Println(string(bds))
}

运行服务测试一下go run demo/base/http/server/server.go,返回 服务端响应内容 hello hello, this is httpserver

到此这篇关于Golang简单实现http的server端和client端的文章就介绍到这了,更多相关golang http client 和server 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • go程序员日常开发效率神器汇总

    go程序员日常开发效率神器汇总

    这篇文章主要介绍了go程序员开发效率神器包含了go常用开发工具,go调试工具,go常用网站,golang常用库,需要的朋友可以参考下
    2022-11-11
  • GO实现协程池管理的方法

    GO实现协程池管理的方法

    这篇文章给大家介绍GO实现协程池管理的方法,分别使用channel实现协程池和消费者模式实现协程池,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-07-07
  • Go语言中常见的坑以及高性能编程技巧分享

    Go语言中常见的坑以及高性能编程技巧分享

    代码的稳健性、高性能、可读性是我们每一位coder必须去追求的目标,本文结合Go语言的特性做了相关总结,感兴趣的小伙伴可以了解一下
    2023-06-06
  • 详解在Go语言单元测试中如何解决文件依赖问题

    详解在Go语言单元测试中如何解决文件依赖问题

    现如今的 Web 应用程序往往采用 RESTful API 接口形式对外提供服务,后端接口直接向前端返回 HTML 文件的情况越来越少,所以在程序中操作文件的场景也变少了,在编写单元测试时,文件就成了被测试代码的外部依赖,本文就来讲解下测试过程中如何解决文件外部依赖问题
    2023-08-08
  • Go基础教程系列之WaitGroup用法实例详解

    Go基础教程系列之WaitGroup用法实例详解

    这篇文章主要介绍了Go基础教程系列之WaitGroup用法实例详解,需要的朋友可以参考下
    2022-04-04
  • Go 语言结构实例分析

    Go 语言结构实例分析

    在本篇文章里小编给大家整理的是一篇关于Go 语言结构实例分析的相关知识点,有兴趣的朋友们可以学习下。
    2021-07-07
  • Golang观察者模式优化订单处理系统实例探究

    Golang观察者模式优化订单处理系统实例探究

    当涉及到订单处理系统时,观察者设计模式可以用于实现订单状态的变化和通知,在这篇文章中,我们将介绍如何使用Golang来实现观察者设计模式,并提供一个基于订单处理系统的代码示例
    2024-01-01
  • Go语言的http/2服务器功能及客户端使用

    Go语言的http/2服务器功能及客户端使用

    Golang 有一个很棒的自带 http 服务器软件包,不用说就是: net/http, 它非常简单,但是功能非常强大。下面这篇文章主要给大家介绍了关于Go语言的http/2服务器功能及客户端使用的相关资料,需要的朋友可以参考下
    2018-09-09
  • go语言中如何使用select的实现示例

    go语言中如何使用select的实现示例

    本文主要介绍了go语言中如何使用select的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Go语言中常用的基础方法总结

    Go语言中常用的基础方法总结

    这篇文章主要为大家详细介绍了Go语言中常用的一些基础方法,例如:使用正则表达式验证字符串、格式化字符串、时间的比较等等,需要的可以参考一下
    2022-09-09

最新评论