当前位置: 首页 > news >正文

[云原生] Go web工作流程

web工作流程

  • Web服务器的工作原理可以简单地归纳为
    • 客户机通过TCP/IP协议建立到服务器的TCP连接
    • 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档
    • 服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解释引擎负责处理“动态内容”,并将处理得到的数据返回给客户端
    • 客户机与服务器断开。由客户端解释HTML文档,在客户端屏幕上渲染图形结果

HTTP协议

  • 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议

  • HTTP协议通常承载于TCP协议之上

    talk is cheap , show me the code

package mainimport ("fmt""io/ioutil""log""net/http"
)func main() {//http://127.0.0.1:8000/go// 单独写回调函数http.HandleFunc("/go", myHandler)// addr:监听的地址// handler:回调函数http.ListenAndServe("127.0.0.1:8000", nil)
}// handler函数
func myHandler(w http.ResponseWriter, r *http.Request) {fmt.Println(r.RemoteAddr, "连接成功")// 请求方式:GET POST DELETE PUT UPDATEfmt.Println("method:", r.Method)// /gofmt.Println("url:", r.URL.Path)fmt.Println("header:", r.Header)fmt.Println("body:", r.Body)// 回复switch r.Method {case "GET":{w.Write([]byte("get"))}case "POST":{// 读取body内容content, err := ioutil.ReadAll(r.Body)if err != nil {log.Println("read post body occurs error: ", err)}fmt.Println("post body:", string(content))w.Write([]byte("post"))}default:{w.Write([]byte(r.Method))}}fmt.Println("end---")
}
package mainimport ("encoding/json""fmt""io""log""net/http""strings"
)type Data struct {Name string `json:"name"`Age  int8   `json:"age"`
}func main() {//resp, _ := http.Get("http://www.baidu.com")//fmt.Println(resp)resp, _ := http.Get("http://127.0.0.1:8000/go")ResponseHandler(resp)fmt.Println("----")data := &Data{Name: "hello",Age:  18,}// 转换成json格式data_json, err := json.Marshal(data)if err != nil {log.Println("json.Marshaler error: ", err)}fmt.Println(string(data_json))resp, _ = http.Post("http://127.0.0.1:8000/go", "application/json", strings.NewReader(string(data_json)))ResponseHandler(resp)
}func ResponseHandler(resp *http.Response) {defer resp.Body.Close()// 200 OKfmt.Println(resp.Status)fmt.Println(resp.Header)buf := make([]byte, 1024)for {// 接收服务端信息n, err := resp.Body.Read(buf)if err != nil && err != io.EOF {fmt.Println(err)return} else {fmt.Println("读取完毕")res := string(buf[:n])fmt.Println(res)break}}
}

结果

> go run .\server.go
127.0.0.1:54856 连接成功
method: GET
url: /go
header: map[Accept-Encoding:[gzip] User-Agent:[Go-http-client/1.1]]
body: {}
end---
127.0.0.1:54856 连接成功
method: POST
url: /go
header: map[Accept-Encoding:[gzip] Content-Length:[25] Content-Type:[application/json] User-Agent:[Go-http-client/1.1]]
body: &{0xc0000b6048 <nil> <nil> false true {0 0} false false false 0x475080}
post body: {"name":"hello","age":18}
end---
> go run .\client.go
200 OK
map[Content-Length:[3] Content-Type:[text/plain; charset=utf-8] Date:[Mon, 25 Apr 2022 17:17:31 GMT]]
读取完毕
get
----
{"name":"hello","age":18}
200 OK
map[Content-Length:[4] Content-Type:[text/plain; charset=utf-8] Date:[Mon, 25 Apr 2022 17:17:31 GMT]]
读取完毕
post

http handler的格式模板

// HandleFunc registers the handler function for the given pattern
// in the DefaultServeMux.
// The documentation for ServeMux explains how patterns are matched.
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {DefaultServeMux.HandleFunc(pattern, handler)
}
http://www.lryc.cn/news/272869.html

相关文章:

  • 【PostgreSQL】约束-主键
  • IDEA 控制台中文乱码问题解决方法(UTF-8 编码)
  • ssm基于BS的仓库在线管理系统的设计与实现论文
  • 鸿蒙HarmonyOs:为什么不支持热更新?
  • 修改 Ubuntu 的配置
  • 虹科方案|从困境到突破:TigoLeap方案引领数据采集与优化
  • 【教学类-43-02】20231226 九宫格数独2.0(n=9)(ChatGPT AI对话大师生成 回溯算法)
  • 麒麟Kylin服务器版-破解root密码
  • cnPuTTY 0.80.0.1—PuTTY Release 0.80中文版本简单说明~~
  • 向爬虫而生---Redis 拓宽篇1 < pipeline传输效率>
  • Unity Hub 无法激活许可证
  • 数据分析求职-如何准备
  • 新手能掌握 PyTorch 的填充技术:深入理解反射、复制、零值和常数填充
  • 地震烈度速报与预警工程成功案例的经验分享 | TDengine 技术培训班第一期成功落地
  • 集群部署篇--Redis 集群动态伸缩
  • excel中解决多行文本自动调整行高后打印预览还是显示不全情况
  • 策略模式+责任链模式配合Nacos实现参数校验链
  • ‘react-native‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
  • c语言:求最小公倍数|练习题
  • 嵌入式系统(二)单片机基础 | 单片机特点 内部结构 最小系统 电源 晶振 复位
  • NLP基础——中文分词
  • 阿里云服务器Alibaba Cloud Linux 3镜像版本大全说明
  • WebGIS开发的常见框架及优缺点
  • ansible 配置jspgou商城上线(MySQL版)
  • 算法导论复习——CHP22 分支限界法
  • 鸿蒙系列--装饰器
  • FairGuard游戏加固产品常见问题解答
  • Redis(二)数据类型
  • 2023年广东省网络安全B模块(笔记详解)
  • 每日力扣算法题(简单篇)