



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、websocket协议的握手和数据帧websocket是定义服务器和客户端如何通过web通信的一种网络协议。协议是通信的议定规 则。组成互联网的协议纟f1由ietf (互联网工程任务纟r)发布。ietf发布评议请求(request for comments, rfc),精确地规定了协议(包括 rfc 6455): websocket 协议。rfc 6455 于 2011 年12月发布,包含了实现websocket客户端和服务器时必须遵循的规则。websocket基本上是一个很简单的协议,主耍流程非常少,实现起来也很简单。为简单起见,卞面只分析握手和数据帧的报文.一握手(handshake) 握
2、手协议由客户端发起,服务器响应,一来一回就完成了基本上是为了兼容现有的http 基础设施.下面是一个客户端发起的握手请求:474554202f20485454502f312e310d0aget./.http/1.1.557067726164653a20776562736f636bupgrade:.websock65740d0a436f6e6e656374696f6e3a20et.connection:557067726164650d0a486f73743a2031upgradehost:139322e3136382e382e3132383a31333028:130300d0
3、a4f726967696e3a206e756c6c0d0origin:null0a507261676d613a206e6f2d63616368.pragma:.no-cach650d0a43616368652d436f6e74726f6ce.cache-control3a206e6f2d63616368650d0a5365632d:no-cachesec-576562536f636b65742d4b65793a2064websocket-key:.d33353946646f366f6d79716678795946359fdo6omyqfxyyf37596163773d3d0d0a5365632
4、d5765627yacw=.sec-web536f636b65742d56657273696f6e3a20socket-version:31330d0a5365632d576562536f636b6513.sec-websocke742d457874656e73696f6e733a20782dt-extensions:.x-7765626b69742d6465666c6174652d66webkit-deflate-f72616d650d0a557365722d4167656e74rame.user-agent3a204d6f7a696c6c612f352e30202857:.mozilla/
5、5.0. (w696e646f7773204e5420362e313b2057indowsnt61.w4f57363429204170706c655765624b69ow64).applewebki742f3533372e333620284b48544d4c2ct/537 36 (khtml,206c696b65204765636b6f2920436872.like.gecko).chr6f6d652f33322e302e313635332e3020ome/320.165305361666172692f3533372e33360d0a0dsafari/537.360aod oa od oa,也
6、就是用zzrnrnz,收尾,这和http头没什么区别.转换成字符串就是:get / http/1.1upgrade: websocketconnection: upgradehost: 28:1300origin: nullpragma: no-cachecache-control: no-cachesec-websocket-key: d359fdo6omyqfxyyf7yacw=sec-websocket-version: 13sec-websocket-extensions: x-webkit一deflate-frameuser-agent: mozilla/5 0
7、 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/32 0l653 0 safari/537.36其屮有一对重要的 kv,就是sec-websocket-key: d359fdo6omyqfxyyf7yacw,看上去是一 个base64编码后的结果,服务器需要对这个sec-key作一些处理,并返回握手响应,这个 处理是:1. byte sha = shal(hd359fdo6omyqfxyyf7yacw=" + "258eafa5-e914-47da- 95ca-c5ab0dc85b
8、11h) getbytes();2 system.out.printin(new string(base64getencode()encode(sha);也就是原封不动的拿着这个sec-key和另一个神奇的字符串“258eafa5-e914-47da-95ca-c5ab0dc85b11"相连,再经过 shal 摘要算法处理,最后再经过base64编码输出即可,上面的输出结果应该是:plo2kc7b5totzlle6a3sqj6ezu4=服务器在收到握手请求后,如果愿意提供服务,则返回一个握手响应,如卜:1. http/1.1 101 switching protocols2. con
9、nection: upgrade3 upgrade: websocket4. sec-websocket-accept: plo2kc7b5t0tzhe6a3sq36ezu4=遵循http的规则,字节流上一样是要以,zrnrn/z收尾.二.数据帧rfc6455 ±叫做非控制帧,除了非控制帧z外,就是控制帧.包括connection close, ping, pong等帧,这里只讲非控制帧,也就是数据帧.数据帧从长度上可以分为三种.帧中的静荷数据(payload data)长度小于0x7e的为小帧, 静荷数据长度=0x7e又0x10000的为中帧,再长的叫大帧.数据帧从类型上暂时可以分
10、为两种,文本帧和二进制帧.例子:a). 一个从客户端发向服务端的小帧.1.82b06af7c6300ad9c634d41878cl6ef5.0.4.x.n.2.c6306cd5cc102387af483ca29c6401c4.01.# h<d.3.ae5904c5bl5b3585a34118b0f55c138ey5 4.924202848553 b s82二进制为:1000 0010,最高位(fin)为1,表示这是最后一帧,第一个帧也可能是最后一帧. 身后还有三位为预留.低位四0010为操作码.也就是0x02,表示这是一个二进制帧,0x01为文木帧.b0二进制为:1011 0000,最高
11、位(mask)为1,表示当前帧的静荷数据部分使用了掩码,事实 上,rfc6455规定从客户端发往服务器端的数据帧必需使用掩码,反过來,从服务器发冋來的,则必需不使用掩码.低7位为静荷数据长度 字段,这里是011 0000,也就是0x30,从上面的报文上看,这个0x30没有包含后面的掩码.6a f7 c6 30掩码,掩码总是四个字节.0ad9c6.直到最后为经过掩码加工后的静荷数据.要回到数据木来的向ti,使用下面 的算法:1. byte by = new byte0x82, 0xb0, 0x6a, 0xf7, 0xc6, 0x30, 0x0a.2. byte mask = new byte 0
12、x6a, (byte) 0xf7, (byte) 0xc6, 0x30 ;3. for (int i = 6 /* 越过掩码.*/; i < by.length; i+)4. byi = (byte) (byi a mask(i - 6) % 4);得到的结果应该是:1. 82 b0 6a f7 c6 30 60 2e 00 04 be ef be fl 04 02 .j.0'2.000006220a204970697856555a546b33.ipixvuztk3368696e32776b5f7265717247336c7979hin2wk_reqrg31yy4547268734363trhsccb).一个从服务器发给客户端的小帧.1.822961270104beefbefl0502000006ib )a'20a08553b02193935e244120f21ecbc47/ u;95d!g3.02f3ec70ed5b7b07c7f4d0 更简单了,还是82,最后一帧,二进制帧,29, 0010 1001,无掩码,也就是身后全长为 0x29.c) .未使用掩码的中帧.81 7e 01 00 66 77 88, r帧长为 0x0100,也就是 256 个字节.d) .未使用掩码的大帧.82 7f 00 00 00 00 11 22 33 44 66 77
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 信息通信网络动力机务员5S管理考核试卷及答案
- 新生儿窒息复苏试题及答案
- 锅炉(承压)设备焊工内部技能考核试卷及答案
- 厦门网约车从业资格考试试题及答案
- 洗毯工设备调试考核试卷及答案
- 贵金属首饰制作工成本预算考核试卷及答案
- 印花配色打样工技能比武考核试卷及答案
- 压电石英晶体配料装釜工转正考核试卷及答案
- 酒厂考试模拟试题及答案
- 2025年新安全生产法考试题及答案
- 电梯安全总监培训记录课件
- 2025四川省水电投资经营集团有限公司所属电力公司员工招聘6人备考模拟试题及答案解析
- 房地产中介居间服务合同5篇
- 童话中的英雄勇敢的小矮人作文10篇范文
- 第二次全国陆生野生动物资源调查技术规程
- 控制计划CP模板
- 最新苏教牛津译林版英语五年级上册Unit 4《Hobbies》Grammar time 公开课课件
- 路面压浆施工方案
- 第8课时 主题阅读《雨的四季》-2022-2023学年七年级语文上册(部编版)
- Linux基础入门培训
- 现场技术服务报告模版
评论
0/150
提交评论