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教程(6):创建网站多列
Apr 02 HTML / CSS
一款纯css3制作的2015年元旦雪人动画特效教程
Dec 29 HTML / CSS
6种非常炫酷的CSS3按钮边框动画特效
Mar 16 HTML / CSS
HTML5移动开发图片压缩上传功能
Nov 09 HTML / CSS
html5/css3响应式页面开发总结
Oct 16 HTML / CSS
浅谈cookie和localStorage那些事
Aug 27 HTML / CSS
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
Nov 05 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
Aug 24 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
Feb 05 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
Jun 03 HTML / CSS
CSS3实现的3D隧道效果
Apr 27 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
如何使用PHP中的字符串函数
2006/11/24 PHP
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
php生成图片验证码
2015/06/09 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
jQuery给div,Span, a ,button, radio 赋值与取值
2016/06/24 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
jQuery实现可以扩展的日历
2020/12/01 jQuery
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Python多线程下载文件的方法
2015/07/10 Python
分析Python中解析构建数据知识
2018/01/20 Python
python获取网页中所有图片并筛选指定分辨率的方法
2018/03/31 Python
python实现自动发送邮件
2018/06/20 Python
对python调用RPC接口的实例详解
2019/01/03 Python
python远程连接MySQL数据库
2019/04/19 Python
Python实现时间序列可视化的方法
2019/08/06 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
CSS3中background-clip和background-origin的区别示例介绍
2014/03/10 HTML / CSS
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
美国在线家具网站:GDFStudio
2021/03/13 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
美术课外活动总结
2014/07/08 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
企业法人代表授权委托书
2014/10/02 职场文书
个人务虚会发言材料
2014/10/20 职场文书
企业团队精神心得体会
2016/01/19 职场文书
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS