【演变】Ajax(AjAj)到WebSocket
提出问题:A => 服务器 => B B端浏览器如何知道服务器有A发来的数据?
解决方案:
第1种:频繁轮询 间隔1秒B向服务器讨要数据,就算数据为空。【浪费服务器大量响应请求资源】
第2种:长轮询 服务器要发数据时才发,如果在服务器响应前,浏览器有新数据只能走并行请求(或者终止当前请求。)
这里有个限制,一般来说规范【超时时间是60秒】。
还有个限制,HTTP1.1版本浏览器只能发起两个连接到同一个主机名。(一般1个连接请求,另1个连接负责抓取图片资源。)
第3种:分块编码 用Transfer-Encoding:chunked代替Content-Length:lenN 【解决长轮询超时限制(大文件下载分块)但不能解决浏览器只能创建两个连接】
初始化 创建一个接收服务器发送的事件监听,后续每个块都是事件触发XMLHttpRequest对象的onreadystatechange事件处理器调用。(连接需要刷新)
第4种:Applet 、Flash 在浏览器和服务器之间【单个连接模拟全双工通信】,本质创建了TCP插头,绕过HTTP协议超时和并发连接限制,以及Ajax安全限制必须要同一个完全限定域名。
插件本身没有安全协议,缓慢占内存...随着移动互联网,渐渐被取代。
【WebSocket协议】原生的TCP插头。80(ws) 443(wss) ,几乎所有防火墙都不阻塞WebSocket连接。
【Http1.1版本升级特性的利用】最早在请求中包含Connection:Upgrade,常被用来从HTTP升级到HTTPS,容易收到中间人攻击所以被HTTPS URI替代。
【使用HTTP升级特性】在升级握手完成之后,不再使用HTTP连接,这时候可以使用持久的、全双工TCP插头连接。
【浏览器厂商规范】协议:ws[s] 头部:Connection:Upgrade Upgrade:websocket
其实HTTP请求不含 ws[s]。只是告诉浏览器要不要SSL/TLS加密。
【初始化】A => 服务器 服务区 => A 101交换协议
【初始化后心跳消息】ping pong
请求
GET /webSocketEndpoint HTTP/1.1
Host:www.example.org
Connection:Upgrade
Origin:http://example.com
Sec-WebSocket-Key:x3JJHMbDL1EzLkh9GBhxDw== //base64编码 浏览器生成
Sec-WebSocket-Version:13
Sec-WebSocket-Protocol:game //聊天、游戏、股票
响应
HTTP/1.1 101 状态码描述
Server:Apache 2.4
Connection:Upgrade
Upgrade:webSocket
Sec-WebSocket-Accept:x3JJHMbDL1EzLkh9GBhxDw== //base64编码 浏览器生成
Sec-WebSocket-Protocol:game //聊天、游戏、股票
TCP插头接入,websocket连接开始,最大的障碍是HTTP代理,最可靠的方式是是用HTTPS版本wss。
【演变】Ajax(AjAj)到WebSocket的更多相关文章
- 反向Ajax,第2部分:WebSocket
转自:http://kb.cnblogs.com/page/112616/ 前言 时至今日,用户期待的是可通过web访问快速.动态的应用.这一文章系列展示了如何使用反向Ajax(Reverse Aja ...
- 反向Ajax:WebSocket
郭晨 软件151 1531610114 WebSocket 在HTML5中出现的WebSocket是一种比Comet还要新的反向Ajax技术,WebSocket启用了双向的全双工通信信道,许多浏览器( ...
- HTML5中的webSocket、ajax、http
本文原链接:https://cloud.tencent.com/developer/article/1115496 https://cloud.tencent.com/developer/articl ...
- 反向ajax实现
在过去的几年中,web开发已经发生了很大的变化.现如今,我们期望的是能够通过web快速.动态地访问应用.在这一新的文章系列中,我们学习如何使用反 向Ajax(Reverse Ajax)技术来开发事件驱 ...
- 【理论面试篇】收集整理来自网络上的一些常见的 经典前端、H5面试题 Web前端开发面试题
##2017.10.30收集 面试技巧 5.1 面试形式 1) 一般而言,小公司做笔试题:大公司面谈项目经验:做地图的一定考算法 2) 面试官喜欢什么样的人 ü 技术好. ...
- JavaScript异步编程原理
众所周知,JavaScript 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着. ...
- 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)
了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编 赵静 译 ISBN 978-7-121-21769-2 2 ...
- WeX5和BeX5比较
http://wex5.com/cn/wex5和bex5比较/ WeX5和BeX5比较 许多对WeX5和BeX5略有了解得人都知道,WeX5和BeX5是完全共用前端框架技术的.但是WeX5和BeX5是 ...
- WEB实时聊天 comet推技术
转自:http://www.cnblogs.com/wodemeng/archive/2012/04/06/2435302.html 今天晚上朋友遇到web服务端推技术的问题,自己就查了下资料,学习了 ...
- 用做网页开发经历了三个阶段(附长篇讨论) good
用做网页开发经历了三个阶段:第一阶:傻干阶段使用Intraweb,傻瓜型,无需知道javascript,html,css,会pascal就可以了. 第二阶:困惑阶段使用Intraweb,有很多限制,比 ...
随机推荐
- 第二十二节,TensorFlow中RNN实现一些其它知识补充
一 初始化RNN 上一节中介绍了 通过cell类构建RNN的函数,其中有一个参数initial_state,即cell初始状态参数,TensorFlow中封装了对其初始化的方法. 1.初始化为0 对于 ...
- Codeforces Round #523 (Div. 2) C Multiplicity (DP)
传送门 https://www.cnblogs.com/violet-acmer/p/10005351.html 题意: 给定一数组a[],从a[ ]中除去任意个元素得到b[ ],求能形成多少“好序列 ...
- (LIS) P1091 合唱队形 洛谷
题目描述 NN位同学站成一排,音乐老师要请其中的(N-KN−K)位同学出列,使得剩下的KK位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2,…,K1,2,…,K,他 ...
- VirtualBox安装linux
VBox相较于VMware要小巧,虚拟机该有的都有了.搭建记录下,学习... centos版本:CentOS-6.6-i386-bin-DVD1 VBox版本:6.0.4-128413-Win 之后可 ...
- python自动化开发-[第三天]-编码,函数,文件操作
今日概要 - 编码详解 - 文件操作 - 初识函数 一.字符编码 1.代码执行过程 代码-->解释器翻译-->机器码-->执行 2.ASCII ASCII:一个Bytes代表一个字符 ...
- Linux基础入门教程
Linux基础入门教程 --------- Linux学习路径 Linux学习者,常常不知道自己改怎么学习linux:Linux初级,也就是入门linux前提是需要有一些计算机硬件相关的知识或是有一下 ...
- Shiro中session超时页面跳转的处理
问题描述 shiro在管理session后,在session超时会进行跳转,这里有两种情况需要考虑,一种是ajax方式的请求超时,一种页面跳转请求的超时. 本文从这两个方面分别考虑并处理. ajax请 ...
- linux shell变量的截取
变量的截断,经常用到的是${},##和%%几个特殊符号.假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt ,可以用${ }分别替换得到不同的值: ${file ...
- ES DSL 基础查询语法学习笔记
1.查询数量 1 2 3 4 5 6 7 curl -XGET 'http://192.168.6.97:9200/_count?pretty' -d ' { "query" ...
- hibernate注解方式来处理映射关系
在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...