HTTP中的一些协议内容会限制某些网站的功能使用javascript
好比,Facebook这类的社交网站,须要实时地观察到海量用户公开发布的内容,而HTTP中的如下标准就会成为瓶颈:java
一条链接上只可发送一个请求web
请求只能从客户端开始。客户端不能够接受除响应之外的指令浏览器
请求/响应首部未经压缩就发送。首部信息越多延迟越大安全
发送冗长的首部。每次互相发送相同的首部形成的浪费较多服务器
可任意选择数据压缩格式。非强制压缩发送。websocket
针对以上问题有几种解决方法:异步
AJAX解决方法:socket
利用javascript和DOM达到局部web页面替换加载的异步通讯手段,因为只更新一部分页面,响应中传输的数据量会所以而减小。性能
缺点:这种方法会致使大量请求发生,并且这个方法只是减小了数据的请求量,HTTP自己的问题并无解决
Comet解决方法:
服务器端接收到请求,会将响应置于挂起状态,当服务器端有内容更新时,再返回该响应。
缺点:链接的持续时间变长,会消耗更多的资源,并且也没有解决HTTP自己存在的问题
SPDY协议解决办法:
在TCP/IP的应用层与运输层之间经过新加会话层的形式运做。考虑到安全性,SPDY规定通讯中使用SSL。
SPDY以会话层的形式加入,控制对数据的流动,但仍是采用HTTP创建通讯链接。因此POST,GET方法仍是有效的
加入SPDY后新增功能:
多路复用流:全部请求的处理都在一条TCP链接上完成,所以TCP的处理效率获得提升
赋予请求优先级:给请求分配优先等级,在发送请求时解决了因带宽低而致使响应变慢的问题
压缩HTTP首部:以前HTTP协议也能够压缩,可是在SPDY中强制压缩了
推送功能:支持服务器主动向客户端推送数据的功能,没必要等待客户端的请求
服务器提示功能:服务器能够主动提示客户端请求所需资源
WebSocket协议解决办法:
web浏览器与web服务器之间全双工通讯标准
特色:
支持服务器端和客户端双向通讯,服务器端不用等待客户端的请求
一旦创建起WEBSOCKET链接就一直保持链接状态,而且websocket的首部信息不多,减小了通讯量
在发送请求的首部字段中加入Upgrade字段,进行websocket的握手,以后双方再也不使用HTTP的数据帧而使用websocket独立的数据帧进行通讯
HTTP2.0中的解决办法:
HTTP2.0中加入了如下技术以提升通讯时的速度和性能
SPDY
HTTP Speed + Mibility
Network-FriendlyHTTP Upgrade
后二者主要是针对移动端的通讯时的速度和性能