从上边两图中我对定长header和变长body的是这么理解的
定长header与变长body的理解
# 定长header与变长body的理解
如用户发送的是http请求
# 1. 首先`http协议的header` 可以理解为HTTP消息头
HTTP消息头是指,在超文本传输协议( Hypertext Transfer Protocol ,HTTP)的请求和响应消息中,
协议头部分的那些组件。
HTTP消息头用来准确描述正在获取的资源、服务器或者客户端的行为,定义了HTTP事务中的具体操作参数。
HTTP消息头是在,客户端请求(Request)或服务器响应(Response)时传递的,位请求或响应的第一行
# 2. 其次 `http协议的body` 可以理解为HTTP消息体
HTTP消息体(请求或响应的内容)是其后传输。(消息体包括请求体和响应体)
`而http协议的body`: 由业务定长的header 和 业务变长的body构成
`业务定长的header`(描述性元数据): 可以理解为固定长度的消息头
`业务变长的body`({k1:v1,k2:v2}): 可以理解为不定长度消息体
`前端代码示例如下:`
axios.post(
serverUrl + '/orders/create',
{ // 业务变长的body
"infotype": infotype,
"infoid": infoid,
"infocontent": infocontent
},
{
headers: { // 业务定长的header
"uid": userInfo.uid,
"sessionid": sessionID,
"command": command,
"bodylen": bodylen
}
})
.then(res => {
...
});
用户请求流程
# 用户请求流程(简略介绍)
1. 用户发送https请求会携带`定长header`和 `变长body` 首先经过lvs+keepalive+nginx在转发到网关层
2. 网关层对`定长header进行过滤分析`,拦截掉不正常的请求;
3. 接着网关层发送正常的请求与业务逻辑层建立tcp长连接;
业务逻辑层会`解析和处理变长body`,然后发送到数据访问层
4. 数据访问层处理完后响应结果
为什么称定长header呢?
# 为什么称定长header呢?
首先`定长header`和`变长body`都是网络传输中的报文;
`网关层: 通信协议: HTTPS`
这层很容易理解,`业务定长header` 就是 http协议的body划出固定长度存放的header
`业务逻辑层:(Dubbo)通信协议: TCP长连接`
tcp协议是基于ip协议的,所以tcp就是ip协议的body;
如body咱们规定这串数据前面128位是ip协议的业务定长header,128位之后是 ip协议的变长body
# 总结
其实所有的header 都是协议的基本描述信息, 所以通常都是定长的
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers
https://itbilu.com/other/relate/EJ3fKUwUx.html