Go-HTTP框架设计实现概述
1.再谈HTTP协议
第一个大规模使用:HTTP0.9 三十多年了
HTTP:超文本传输协议(Hypertext Transfer Protocal)
为什么是超文本:因为图片、音乐、视频是文本的扩充
为什么需要协议:约定俗称的规则(像说话)有边界
协议里有什么:
1.请求行/状态行
方法名 URL 协议版本/协议版本 状态码 状态码描述
1xx:信息类
2xx:成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误
2.请求头/响应头
3.请求体/响应体
DEMO:
package main
import (
"context"
"code.byted.org/middleware/hertz/pkg/app"
"code.byted.org/middleware/hertz/pkg/server"
)
func main() {
h := server.New()
h.POST("/sis", func(c context.Context, ctx *app.requestContext) {//post方法 url 为/sis
ctx.Data(200, "text/plain;charset=utf-8", []byte("ok"))//返回ok
})
h.Spin()
}
HTTP1:队头阻塞 传输效率低 明文
HTTP2:多路复用 头部压缩 二进制协议
QUIC:基于UDP 解决了队头阻塞 加密 快启动
应用层设计
:提供合理的API:ctx.Body()而不是ctx.BodyA()
可理解、简单、冗余、兼容、可测、可见
中间件设计
:洋葱模型 日志-Metrics-Biz Handler(为了配合Handler实现一个完整的请求处理生命周期 有预处理 有后处理 可以注册多中间件)
路由设计
:
协议层设计
抽象出合适的接口
网络层设计
:网络模型