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 相关文章推荐
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
Mar 17 HTML / CSS
轻松掌握CSS3中的字体大小单位rem的使用方法
May 24 HTML / CSS
分享CSS3制作卡片式图片的方法
Jul 08 HTML / CSS
html5嵌入内容_动力节点Java学院整理
Jul 07 HTML / CSS
HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行文字等
Nov 30 HTML / CSS
html5 标签
Jul 16 HTML / CSS
HTML5制作酷炫音频播放器插件图文教程
Dec 30 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
Nov 18 HTML / CSS
详解Canvas 跨域脱坑实践
Nov 07 HTML / CSS
html5 冒号分隔符对齐的实现
Jul 31 HTML / CSS
html2canvas生成清晰的图片实现打印的示例代码
Sep 30 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
Sep 10 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 setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
PHP使用Nginx实现反向代理
2017/09/20 PHP
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
浅谈jQuery中setInterval()方法
2015/07/07 Javascript
自动完成的搜索框javascript实现
2016/02/26 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
简单的JS轮播图代码
2016/07/18 Javascript
js中apply()和call()的区别与用法实例分析
2018/08/14 Javascript
Vue组件的使用及个人理解与介绍
2019/02/09 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
工商管理本科生求职信
2014/07/13 职场文书
外贸采购员岗位职责
2015/04/03 职场文书
收入证明申请书
2015/06/12 职场文书
执行力心得体会范文
2016/01/11 职场文书
家庭教育培训学习心得体会
2016/01/14 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers