消息包
客户端与服务器之间使用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 |