XMPP over HTTP

XMPP over HTTP是定义在XEP-0124里的扩展。它的原理是把XML stream头替换成HTTP post包头。

POST /webclient HTTP/1.1
Host: httpcm.example.com
Accept-Encoding: gzip, deflate
Content-Type: text/xml; charset=utf-8
Content-Length: 104

<body content='text/xml; charset=utf-8'
      from='user@example.com'
      hold='1'
      rid='1573741820'
      to='example.com'
      route='xmpp:example.com:9999'
      ver='1.6'
      wait='60'
      ack='1'
      xml:lang='en'
      xmlns='image 

在上图红色圆圈中,Server会将Client来的Post请求hold一段时间,直到有数据响应或者timeout才返回给Client。Client端如果收到数据响应,无论是否有数据需要传输,必须立即再发起一个Post请求。这样就有了一种心跳服务。因为只需要隔timeout时间轮询Client,大大减少了网络的数据传输量。

 

保护未加密连接

XMPP建议采用https来进行传输。但在只允许http传输的情况下,XMPP采用了SHA-1哈希算法来保证链路的安全性。

K(1) = hex(SHA-1(seed))
K(2) = hex(SHA-1(K(1)))
...
K(n) = hex(SHA-1(K(n-1)))

1. 首先在Client端生成两个随机数,seed和n。用seek和n可以计算出K(1)…K(n) n个数值。

2. Client在向Server传输数据时将newkey先设置成K(n)。

<body …

newkey='K(n)'

xmlns='http://jabber.org/protocol/httpbind'/>

3. Client在第二次传输时,将newkey设置成K(n-1)。

<body rid='1573741821'
      sid='SomeSID'
      key=‘K(n-1)’
      xmlns='http://shallon.javaeye.com/blog/126428

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值