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 按钮 利用css3实现超酷下载按钮
Mar 18 HTML / CSS
详解CSS3原生支持div铺满浏览器的方法
Aug 30 HTML / CSS
css3给背景图片加颜色遮罩的方法
Nov 05 HTML / CSS
CSS3.0实现霓虹灯按钮动画特效的示例代码
Jan 12 HTML / CSS
使用html2canvas将页面转成图并使用用canvas2image下载
Apr 04 HTML / CSS
整理的15个非常有用的 HTML5 开发教程和速查手册
Oct 18 HTML / CSS
基于HTML5 FileSystem API的使用介绍
Apr 24 HTML / CSS
HTML5实现桌面通知 提示功能
Oct 11 HTML / CSS
HTML5实现无刷新修改URL的方法
Nov 14 HTML / CSS
Html5踩坑记之mandMobile使用小记
Apr 02 HTML / CSS
萌新的HTML5 入门指南
Nov 06 HTML / CSS
html中显示特殊符号(附带特殊字符对应表)
Jun 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
配置支持SSI
2006/11/25 PHP
织梦模板标记简介
2007/03/11 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
一个简单的php路由类
2016/05/29 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
根据分辨率不同,调用不同的css文件
2006/07/07 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
js 输入框 正则表达式(菜鸟必看教程)
2017/02/19 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
QML用PathView实现轮播图
2020/06/03 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
以思科路由器为例你写下单臂路由的配置命令
2013/08/03 面试题
PPP协议组成及简述协议协商的基本过程
2015/05/28 面试题
同学会邀请书大全
2014/01/12 职场文书
校园安全广播稿
2014/02/08 职场文书
开学典礼感言
2014/02/16 职场文书
药店促销活动策划方案
2014/08/24 职场文书
增值税发票丢失证明
2015/06/19 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
Apache Calcite 实现方言转换的代码
2021/04/24 Servers
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
python 经纬度求两点距离、三点面积操作
2021/06/03 Python