消息包
客户端与服务器之间使用HTTP数据传输协议进行信息交互,客户端以HTTP协议中的POST请求方式将XML数据提交至服务器,服务器响应客户端同样也以POST数据流方式传输XML数据。客户端和服务器端发送和解析XML数据时要遵循数据传输协议。
每一个请求、响应消息包都是一个XML字符串,包含消息头和消息体两部分,对于不同类型的请求、响应,消息头的格式都相同的,而消息体会携带具体类型的请求、响应信息。下面给出消息包格式定义
消息头
所有请求、响应消息包中消息头的数据格式都是一样的,其中消息头很重要的一个作用就是来用进行数据的合法性校验。数据格式如下:
消息头格标签含义说明如表3.1所示:
表3.1 消息头说明表
标签名 | 类型 | 长度 | 说明 | ||
messengerid | 字符串 | 20 | 消息编号,格式为y yyyyMMddHHmmss +六位递增序号 | ||
timestamp | 字符串 | 14 | 格式为:yyyyMMddHHmmss | ||
transactiontype | 字符串 | 3 | 请求类型(请求码) | ||
username | 字符串 | <64 | 用户账号 | ||
digest | 字符串 | 32 | 消息包摘要,算法用md5,摘要内容为(时间戳+密码+消息体明文) | ||
source | 字符串 | 32<= | 操作终端来源 | ||
compress | 字符串 | 32<= | 明文加密方式,比如DES加密 |
不同请求类型的请求、响应消息体不同,以推介图书请求为例,请求、响应消息体如表3.2所示:
表3.2 热门图书请求、响应消息体(明文)
项目 | 内容 |
请求码 | 20002 |
请求消息体 | <elements> <element> <bookIndex>0</bookIndex> </element> </elements> |
响应消息体 | <books> <book> <id>20001</id> <bookname>数据结构</bookname> <type>计算机</type> <bookauthor>张三</bookauthor> <bookprice>34</bookprice> <totalbook>12</totalbook> <case>T301</case> <bookintime>2014-1-12</bookintime> <operator>李四</operator> <bookcomment>无</bookcomment> <bookaddress>人民出版社</bookaddress> <currbook>5</currbook> <bookcode>1</bookcode> <image>images/book1.png</image> </book> ……………………. </books> |
数据加密
为了传输数据的安全,在传输的过程中对XML数据做签名和加密处理。服务器和客户端接收到消息包后进行MD5校验,验证消息包的合法性。
MD5签名数据包括时间戳、密码、消息体明文,加入时间戳的目的是保证每一次请求或响应的MD5签名值都不一样,密码是客户端与服务器端约定好的密码,不会出现在传输数据中。
利用DES加密标签<body></body>之间部分,将传输数据转换成密文以后传输。其加密密钥也是客户端与服务器端约定好的,不会出现在传输数据中。
名词说明
传输协议描述中名词MD5、HTTP、XML说明如表3.3所示:
表3.3 名词说明
名词 | 说明 |
MD5 | message-digest algorithm 5 |
HTTP | hypertext transfer protocol |
XML | extensible markup language |
最后推荐一个FQ软件(求Star):GitHub - zhining-lu/netty-quic-proxy: A forward proxy base netty uses quic protocol