HTTP:超文本传输协议;
它是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网数据通信的基础。通过 HTTP,客户端(如浏览器)可以向服务器发送请求以获取网页、图片、视频等各种网络资源,服务器在接收到请求后会进行相应处理并返回响应数据给客户端。
语法:
1.消息格式:
一个 HTTP 请求消息通常由请求行(状态行)、请求头部(响应头)和请求正文/响应体(可选)组成:
- 请求行包含请求方法、请求的资源路径和协议版本,如
“GET /index.html HTTP/1.1”。 - 请求头部包含了许多关于请求的附加信息,如
“User - Agent”(用户代理,用于标识客户端软件的类型和版本)、“Accept - Language”(接受的语言,用于告诉服务器客户端希望接收的语言版本的内容)等。
这些部分都有严格的格式要求,按照规定的格式编写消息才能被对方正确理解。
2.数据编码规则
协议还规定了数据的编码方式。
例如,在 URL(统一资源定位符)中,特殊字符需要进行编码。如果 URL 中包含空格等特殊字符,会按照一定的编码规则(如使用 “%20” 来代替空格)进行编码,
这样在传输过程中才能保证数据的完整性和准确性,并且接收方能够正确地解码并理解数据的原始含义。
语义:
HTTP 协议,它定义了多种请求方法,如 “GET”“POST”“PUT”“DELETE” 等。“GET” 方法用于请求获取指定的资源,通常用于获取网页、图片、文档等内容。例如,当你在浏览器中输入一个网页的网址并回车时,浏览器会向服务器发送一个带有 “GET” 方法的请求,请求获取该网页的内容。“POST” 方法主要用于向服务器提交数据,比如在网页上填写表单(如注册信息、登录信息、发表评论等)后提交时,浏览器就会使用 “POST” 方法将数据发送给服务器。
状态码:(请求行中)
1xx(信息性状态码)
2xx(成功状态码)
3xx(重定向状态码)
4xx(客户端错误状态码)
5xx(服务器错误状态码)
示例demo:
package main
import (
"context"
"code.byted.org/middleware/hertz/pkg/app"
"code.byted.org/middleware/hertz/pkg/app/server"
)
func main( ) {
h := server.New( )
h.POST("/sis", func(c context.Context, ctx *app.RequestContext) {
ctx.Data(200, "text/plain; charset=utf-8", []byte("OK"))
})
h.Spin()
}
不足与展望: HTTP1:对头阻塞;传输效率低;明文传输不安全; HTTP2:多路重复;头部压缩;二进制协议; QUIC:基于UDP实现;解决对头阻塞;加密减少握手次数;支持快速启动;