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动画效果
Aug 14 HTML / CSS
CSS3图片旋转特效(360/60/-360度)
Oct 10 HTML / CSS
两种CSS3伪类选择器详细介绍
Dec 24 HTML / CSS
使用css3实现超炫的loading加载动画效果
May 07 HTML / CSS
布局和排版教程 纯css3实现图片三角形排列
Oct 17 HTML / CSS
CSS3 实现发光边框特效
Nov 11 HTML / CSS
HTML5之SVG 2D入门6—视窗坐标系与用户坐标系及变换概述
Jan 30 HTML / CSS
HTML5新特性之语义化标签
Oct 31 HTML / CSS
Html5原创俄罗斯方块(基于canvas)
Jan 07 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
Nov 19 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
Apr 14 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
创建配置文件 用PHP写出自己的BLOG系统 2
2010/04/12 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
Web程序工作原理详解
2014/12/25 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
js实现小星星游戏
2020/03/23 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
Python 基础教程之str和repr的详解
2017/08/20 Python
python中时间、日期、时间戳的转换的实现方法
2019/07/06 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
英文版销售经理个人求职信
2013/11/20 职场文书
企业法人授权委托书
2014/04/03 职场文书
公司节能减排方案
2014/05/16 职场文书
领导班子四风表现材料
2014/08/23 职场文书
爱国主义电影观后感
2015/06/18 职场文书
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
Python turtle编写简单的球类小游戏
2022/03/31 Python