image.png

image.png
从上边两图中我对定长header和变长body的是这么理解的

定长header与变长body的理解

  1. # 定长header与变长body的理解
  2. 如用户发送的是http请求
  3. # 1. 首先`http协议的header` 可以理解为HTTP消息头
  4. HTTP消息头是指,在超文本传输协议( Hypertext Transfer Protocol HTTP)的请求和响应消息中,
  5. 协议头部分的那些组件。
  6. HTTP消息头用来准确描述正在获取的资源、服务器或者客户端的行为,定义了HTTP事务中的具体操作参数。
  7. HTTP消息头是在,客户端请求(Request)或服务器响应(Response)时传递的,位请求或响应的第一行
  8. # 2. 其次 `http协议的body` 可以理解为HTTP消息体
  9. HTTP消息体(请求或响应的内容)是其后传输。(消息体包括请求体和响应体)
  10. `而http协议的body`: 由业务定长的header 业务变长的body构成
  11. `业务定长的header`(描述性元数据): 可以理解为固定长度的消息头
  12. `业务变长的body`({k1:v1,k2:v2}): 可以理解为不定长度消息体
  13. `前端代码示例如下:`
  14. axios.post(
  15. serverUrl + '/orders/create',
  16. { // 业务变长的body
  17. "infotype": infotype,
  18. "infoid": infoid,
  19. "infocontent": infocontent
  20. },
  21. {
  22. headers: { // 业务定长的header
  23. "uid": userInfo.uid,
  24. "sessionid": sessionID,
  25. "command": command,
  26. "bodylen": bodylen
  27. }
  28. })
  29. .then(res => {
  30. ...
  31. });

用户请求流程

  1. # 用户请求流程(简略介绍)
  2. 1. 用户发送https请求会携带`定长header`和 `变长body` 首先经过lvs+keepalive+nginx在转发到网关层
  3. 2. 网关层对`定长header进行过滤分析`,拦截掉不正常的请求;
  4. 3. 接着网关层发送正常的请求与业务逻辑层建立tcp长连接;
  5. 业务逻辑层会`解析和处理变长body`,然后发送到数据访问层
  6. 4. 数据访问层处理完后响应结果

为什么称定长header呢?

  1. # 为什么称定长header呢?
  2. 首先`定长header`和`变长body`都是网络传输中的报文;
  3. `网关层: 通信协议: HTTPS`
  4. 这层很容易理解,`业务定长header` 就是 http协议的body划出固定长度存放的header
  5. `业务逻辑层:(Dubbo)通信协议: TCP长连接`
  6. tcp协议是基于ip协议的,所以tcp就是ip协议的body;
  7. body咱们规定这串数据前面128位是ip协议的业务定长header128位之后是 ip协议的变长body
  8. # 总结
  9. 其实所有的header 都是协议的基本描述信息, 所以通常都是定长的

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers
https://itbilu.com/other/relate/EJ3fKUwUx.html