HTML5实现WebSocket协议原理浅析


Posted in HTML / CSS onJuly 07, 2014

WebSocket协议的目的是为了工作于现有的网络基础设施。作为这一设计原则的一部分,WebSocket连接的协议规范定义了一个HTTP连接作为其开始生命周期,进而保证其与pre-WebSocket世界的完全向后兼容。通常来说从HTTP协议切换WebSocket称为WebSocket握手。

浏览器发送一个请求到服务器,这表明它想开关从HTTP WebSocket协议。客户端通过升级标题表达的愿望,代码如下所示:

复制代码
代码如下:
GET ws://echo.websocket.org/?encoding=text HTTP/1.1
Origin: http://websocket.org
Cookie: __utma=99as
Connection: Upgrade
Host: echo.websocket.org
Sec-WebSocket-Key: uRovscZjNol/umbTt5uKmw==
Upgrade: websocket
Sec-WebSocket-Version: 13

如果服务器理解WebSocket协议,它通过升级头同意协议切换。

复制代码
代码如下:
HTTP/1.1 101 WebSocket Protocol Handshake
Date: Fri, 10 Feb 2012 17:38:18 GMT
Connection: Upgrade Server: Kaazing Gateway
Upgrade: WebSocket
Access-Control-Allow-Origin: http://websocket.org
Access-Control-Allow-Credentials: true
Sec-WebSocket-Accept: rLHCkw/SKsO9GAH/ZSFhBATDKrU=
Access-Control-Allow-Headers: content-type

此时HTTP连接分解并取代了WebSocket连接在同一底层TCP / IP连接。WebSocket连接使用HTTP(80)和HTTPS端口一样(443),默认情况下。

连接建立后,WebSocket数据帧可以发送客户机和服务器之间来回在全双工模式下。两种文本和二进制帧可以在两个方向同时发送。只有两个字节数据最小陷害。对于文本帧,每一帧始于0 x00字节,以0 xff字节结束,包含utf - 8数据。WebSocket文本框架使用一个终结者,而二进制帧使用前缀长度。

HTML / CSS 相关文章推荐
HTML5如何适配 iPhone IOS 底部黑条
Mar 09 HTML / CSS
手把手教你用纯css3实现轮播图效果实例
May 04 HTML / CSS
css3打造一款漂亮的卡哇伊按钮
Mar 20 HTML / CSS
详解CSS3的图层阴影和文字阴影效果使用
Jun 09 HTML / CSS
css3 盒模型以及box-sizing属性全面了解
Sep 20 HTML / CSS
HTML5文档结构标签
Apr 21 HTML / CSS
浅析HTML5中header标签的用法
Jun 24 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
Mar 13 HTML / CSS
使用phonegap操作数据库的实现方法
Mar 31 HTML / CSS
基于HTML5 WebGL的3D机房的示例
Mar 16 HTML / CSS
详解canvas.toDataURL()报错的解决方案全都在这了
Mar 31 HTML / CSS
css filter和getUserMedia的联合使用
Feb 24 HTML / CSS
HTML5新增的表单元素和属性实例解析
Jul 07 #HTML / CSS
HTML5+CSS3实现拖放(Drag and Drop)示例
Jul 07 #HTML / CSS
html5的自定义data-*属性与jquery的data()方法的使用
Jul 02 #HTML / CSS
Html5新特性用canvas标签画多条直线附效果截图
Jun 30 #HTML / CSS
HTML5通过调用canvas对象的getContext()方法来获取绘图环境
Jun 23 #HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
Jun 23 #HTML / CSS
HTML5 在canvas中绘制矩形附效果图
Jun 23 #HTML / CSS
You might like
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
PHP数组函数知识汇总
2016/05/12 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
PHP实现转盘抽奖算法分享
2020/04/15 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
jquery中的$(document).ready()与window.onload的区别
2009/11/18 Javascript
jquery.validate使用攻略 第五步 正则验证
2010/07/01 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
JQuery 使用attr方法实现下拉列表选中
2014/10/13 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
python中sleep函数用法实例分析
2015/04/29 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
2020/09/20 Python
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
员工保密承诺书
2014/05/28 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
同乡会致辞
2015/07/30 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
《中国古代诗歌散文欣赏》高中语文教材
2019/08/20 职场文书
AJAX学习笔记
2021/05/18 Javascript
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL