1.再谈HTTP协议
第一个大规模使用:HTTP0.9 三十多年了
HTTP:超文本传输协议(Hypertext Transfer Protocal)
为什么是超文本:因为图片、音乐、视频是文本的扩充
为什么需要协议:约定俗称的规则(像说话)有边界
虽然 HTTP 和 HTTPS 在名称上非常相似,但它们在安全性上有本质的区别:HTTPS通过使用SSL/TLS协议,为数据传输提供了加密和完整性校验,从而保护了用户的隐私和数据安全。随着网络安全意识的提高,越来越多的网站开始使用HTTPS来保护用户数据。
协议里有什么:
1.请求行/状态行
方法名 URL 协议版本/////////协议版本 状态码 状态码描述
1xx:信息类
2xx:成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。
HTTP 状态码的英文为 HTTP Status Code。
下面是常见的 HTTP 状态码:
- 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实现一个完整的请求处理生命周期 有预处理 有后处理 可以注册多中间件)
路由设计:
协议层设计抽象出合适的接口
网络层设计:网络模型