一、HTTP的不足
随着互联网的发展,Web的用途更加多样化,出现了购物网站,社交网络服务,企业内部管理工具等等,以社交网络服务为例,当我们在使用微博的时候,几乎能够实时观察到海量用户公开发布的内容,当上万人同时发布消息时,Web网站为了保存这些新增的内容,在很短的时间内会发生大量的内容更新,而对于客户端而言,为了实时显示这些更新内容,服务器一有更新,客户端就需要将这些更新内容反馈到客户端界面上,单用HTTP是无法妥善的处理这些问题的。
HTTP的瓶颈如下:
•一个连接上只能发生一个请求
•请求只能从客户端开始,客户端不可以接收除响应以外的指令
•请求/响应首部未经压缩就发送,如果首部信息越多那么延迟越大
•发送冗长的首部,每次互相发生相同的首部造成是资源浪费较多
•可任意选择压缩格式,非强制压缩
试想,如果使用HTTP协议来更新微博内容,那么客户端就必须频繁的到服务器进行确认是否有新的信息出现,如果服务器没有新的内容更新,那么该请求就是无意义的请求,页面还得重新加载一次,浪费服务器和客户端的资源。 有什么缓解的办法呢?
二、Ajax
Ajax(异步JavaScript和XML技术),该技术利用js和DOM(文档对象模型),可以达到web页面替换加载的异步通信手段,跟以前的同步通信相比,优点就是它只更新一部分页面,响应中传输的数据量就会因此减少。 Ajax的核心技术是名为XMLHttpRequest的API,通过JS脚本语言的调用就能和服务器进行HTTP通信,通过这种手段,就能从已加载完毕的Web页面上发起请求,只更新局部页面。 不过对于Ajax而言,获取信息还是通过请求服务器获取响应,还是会导致一些无意义的请求,不过相比于以前的同步通信而言,可以减少请求的数据量,但是还是没有解决HTTP协议本身存在的问题。
1、ajax模型
传统的 Web 应用模型与基于 AJAX 的模型之比较
2、Ajax实现
三、Comet
Comet是一种用于web的推送技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,Comet 有时也称反向Ajax或服务器端推技术(server-side push)。其思想很简单:将数据直接从服务器推到浏览器,而不必等到浏览器请求数据 通常,服务器端接收到请求,在处理完毕后会立即返回响应,但是为了实现推送功能,Comet会先将响应置于挂起状态,当服务器端有内容更新时,再返回该响应。
1、实现方式
Comet目前有两种实现方式,长轮询和iframe流。
•基于AJAX长轮询(long-polling)——AJAX 的出现使得 JavaScript 可以调用XMLHttpRequest 对象发出 HTTP 请求,JavaScript 响应处理函数根据服务器返回的信息对 HTML 页面的显示进行更新。使用 AJAX 实现“服务器推送”细节如下:
–服务器端会阻塞请求直到服务器有数据传递给客户端或超时才返回。
–客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
–当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。模型如下 :
•基于iframe及htmlfile流的方式——iframe流方式是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间建立一条长链接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript),来实时更新页面。 iframe流方式的优点是浏览器兼容好,Google公司在一些产品中使用了iframe流,如Google Talk。 模型如下:
优点:实时性好(消息延时小);性能好(能支持大量用户)缺点:长期占用连接,丧失了无状态高并发的特点。
这个方案还是没有解决HTTP本身存在的问题。
四、SPDY协议
为了在协议级别消除HTTP的瓶颈,Google开发了一种技术SPDY,该协议一种开放的网络传输协议,他也是HTTP/2.0的前身,HTTP/2.0的关键技术来自于SPDY。2015年9月,Google 宣布了计划,chrome移除对SPDY的支持,拥抱 HTTP/2。SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作,同时为了考虑安全性问题,SPDY规定通信中使用SSL。SPDY 协议旨在通过压缩、多路复用和优先级来缩短网页的加载时间和提高安全性。
为了在协议级别消除HTTP的瓶颈,Google开发了一种技术SPDY,该协议一种开放的网络传输协议,他也是HTTP/2.0的前身,HTTP/2.0的关键技术来自于SPDY。2015年9月,Google 宣布了计划,chrome移除对SPDY的支持,拥抱 HTTP/2。SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作,同时为了考虑安全性问题,SPDY规定通信中使用SSL。SPDY 协议旨在通过压缩、多路复用和优先级来缩短网页的加载时间和提高安全性。
1、多路复用
通过单一的TCP连接,可以无限制的处理多个HTTP请求,所有请求的处理都在一条TCP连接上完成,这样只需建立一个 TCP 连接就可以传送网页上所有资源,不仅可以减少消息交互往返的时间还可以避免创建新连接造成的延迟,使得 TCP 的效率更高。
2、请求优化
SPDY的多路复用可以设置优先级,而不像传统 HTTP 那样严格按照先入先出一个一个处理请求,它会选择性的先传输 CSS 这样更重要的资源,然后再传输网站图标之类不太重要的资源,可以避免让非关键资源占用网络通道的问题,提升 TCP 的性能。
3、压缩HTTP头部
压缩HTTP请求和响应的首部,这样通信产生的的数据包发送和接收的字节数就更少了
4、推送功能
服务器可以主动向客户端发起通信向客户端推送数据。这样服务器就能直接发生数据而不必等待客户端的请求
###服务器提示功能服务器可以主动提示客户端请求所需要的资源。由于在客户端发现资源之前就可以获知资源的存在状态,因此在资源已经缓存的情况下,可以避免发生不必要的请求。
5、速度对比
HTTPS与SPDY前端加载速度对比视频
http://player.youku.com/embed/XMzk3Njk1MDM2
五、参考
https://www.ibm.com/developerworks/cn/web/wa-lo-comet/index.html
社群交流
领取专属 10元无门槛券
私享最新 技术干货