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 相关文章推荐
CSS3 选择器 基本选择器介绍
Jan 21 HTML / CSS
用CSS3实现背景渐变的方法
Jul 14 HTML / CSS
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
Jan 27 HTML / CSS
HTML5之SVG 2D入门5—颜色的表示及定义方式
Jan 30 HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
Apr 10 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
Apr 24 HTML / CSS
简单介绍HTML5中的文件导入
May 08 HTML / CSS
HTML 5.1来了 9月份正式发布 更新内容预览
Apr 26 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
Aug 28 HTML / CSS
HTML5 层的叠加的实现
Jul 07 HTML / CSS
Canvas获取视频第一帧缩略图的实现
Nov 11 HTML / CSS
CSS 实现磨砂玻璃(毛玻璃)效果样式
May 21 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
杏林同学录(九)
2006/10/09 PHP
php FPDF类库应用实现代码
2009/03/20 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
DropDownList控件绑定数据源的三种方法
2016/12/24 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
angular 服务随记小结
2019/05/06 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
[01:01:18]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#2COL VS LGD
2016/03/03 DOTA
python实现simhash算法实例
2014/04/25 Python
python获取指定目录下所有文件名列表的方法
2015/05/20 Python
对python3新增的byte类型详解
2018/12/04 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
Python在线和离线安装第三方库的方法
2020/10/31 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
自荐信的五个重要部分
2013/10/29 职场文书
马云的职业生涯规划之路
2014/01/01 职场文书
汽车销售顾问求职自荐信
2014/01/01 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
社区服务活动感想
2015/08/11 职场文书
PHP中多字节字符串操作实例详解
2021/08/23 PHP
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript