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 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在Lighttpd服务器中运行Django应用的方法

    lighttpd (http://www.djangoproject.com/r/lighttpd/) 是一个轻量级的Web服务器,通常被用来提供静态页面的访问. 它天生支持FastCGI,因此除非你的站点需要一些Apache特有的特性,否则,lighttpd对于静态和动态页面来说都是理想的选择. 确保 mod_fastcgi 在模块列表中,它需要出现在 mod_rewrite 和 mod_access ,但是要在 mod_accesslog 之前. 将下面的内容添加到你的lighttpd的配置

  • go语言实现一个最简单的http文件服务器实例

    本文实例讲述了go语言实现一个最简单的http文件服务器的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     "net/http" ) func main() {     http.Handle("/", http.FileServer(http.Dir("./")))     http.ListenAndServe(":8123", nil) } 希望本文

  • golang实现http服务器处理静态文件示例

    本文实例讲述了golang实现http服务器处理静态文件的方法.分享给大家供大家参考,具体如下: 新版本更精简: 复制代码 代码如下: package main import (     "flag"     "log"     "net/http"     "os"     "io"     "path"     "strconv" ) var dir string

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

    前言 大家都知道,Go的标准库HTTP服务器默认支持HTTP/2.那么,在这篇文章中,我们将首先展示Go的http/2服务器功能,并解释如何将它们作为客户端使用. 在这篇文章中,我们将首先展示Go的http/2服务器功能,并解释如何将它们作为客户端使用.Go的标准库HTTP服务器默认支持HTTP/2. 下面话不多说了,来一起看看详细的介绍吧 HTTP/2 服务器 首先,让我们在Go中创建一个http/2服务器!根据http/2文档,所有东西都是为我们自动配置的,我们甚至不需要导入Go的标准库ht

  • 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标准端

  • golang 实现tcp server端和client端,并计算RTT时间操作

    server端代码: package main import ( "fmt" "net" "log" "os" ) func main() { addr := "0.0.0.0:8787" tcpAddr, err := net.ResolveTCPAddr("tcp",addr) if err != nil { log.Fatalf("net.ResovleTCPAddr f

  • golang简单获取上传文件大小的实现代码

    本文实例讲述了golang简单获取上传文件大小的方法.分享给大家供大家参考,具体如下: 复制代码 代码如下: package main import (     "fmt"     "io"     "net/http"     "log"     "os" ) // 获取文件大小的接口 type Size interface {     Size() int64 } // 获取文件信息的接口 type S

  • golang简单tls协议用法完整示例

    本文实例讲述了golang简单tls协议用法.分享给大家供大家参考,具体如下: 生成私钥: openssl genrsa -out key.pem 2048 生成证书: openssl req -new -x509 -key key.pem -out cert.pem -days 3650 https: 复制代码 代码如下: package main import (     "io"     "net/http"     "log" ) fun

  • golang简单读写文件示例

    本文实例讲述了golang简单读写文件的方法.分享给大家供大家参考,具体如下: 这里演示golang读写文件的方法: 复制代码 代码如下: package main import (     "fmt"     "os" ) func main() {     f, err := os.OpenFile("file2.txt", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0x644)     if err !=

  • golang简单位运算示例

    本文实例讲述了golang简单位运算.分享给大家供大家参考,具体如下: 复制代码 代码如下: // http://play.golang.org/p/idG7Ri_krU package main import "fmt" func main() {     var n uint8 = 6     fmt.Printf("%s\n%08b\n%08b\n\n", "6<<1 左移1位", n, n<<1)     fmt.

  • 从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例

    本文实例讲述了Node.js多页面实现数学运算的client端和server端.分享给大家供大家参考,具体如下: 1.server端 支持数学运算的服务器,服务器的返回结果用json对象表示. math-server.js //通过监听3000端口使其作为Math Wizard的后台程序 var math = require('../nodejsExample3/math.js'); var express = require('express'); var app = express(); a

  • 使用vue实现简单键盘的示例(支持移动端和pc端)

    常看到各种app应用中使用自定义的键盘,本例子中使用vue2实现个简单的键盘,支持在移动端和PC端使用 实现效果: Keyboard.vue <template> <div class="keyboard" v-show="showKeyboard" v-clickoutside="closeModal"> <p v-for="keys in keyList"> <template v

  • nginx简单配置多个server的方法

    1:安装nginx步骤就不说了 ,自行百度. 2:打开nginx的配置文件nginx.conf 这是项目1的配置,现在需要再开个同域名不同端口的项目,如下图: 注意:LZ一直出现访问不了,折腾了许久,是因为服务器www.pigaudio.com或120.77.223.7只开了默认的80端口,而8088端口并未开,所以只需要登陆你的服务账号添加一个8088即可,比如你的服务器是阿里云购买的,则需要登陆阿里云加一个8088,还有问题就是,如果你服务器打开了网络防火墙也是访问也是不行的,关了即可. 到

  • typescript+react实现移动端和PC端简单拖拽效果

    本文实例为大家分享了typescript+react实现移动端和PC端简单拖拽效果的具体代码,供大家参考,具体内容如下 一.移动端 1.tsx代码 import { Component } from "react"; import './Tab.less' interface Props { } interface user { id: string, text: string } interface content { id: string, text: string } inter

随机推荐