消除HTTP瓶颈的SPDY
旨在解决HTTP的性能瓶颈,减少Web页面的加载时间(50%)
- HTTP的瓶颈
对于实时更新的页面,需要客户端不断的发送请求给服务器,如果服务器没有更新,则就产生了徒劳的通信。
为了实现实时更新等Web应用的功能HTTP 存在以下局限:
1.一条连接上只能发送一个请求
2.请求只能从客户端发起,客户端不能接受除响应以外的指令
3.请求/响应首部未经压缩就发送,首部信息越多越延迟
4.每次互相发送相同的首部,造成浪费
5.可任意选择数据压缩格式,非强制压缩发送
解决办法:
1.Ajax
实现了异步刷新,只更新局部页面,减少了响应中传输的数据量
但是利用Ajax实时的向服务端发送请求,也可能需要发送大量的请求,仍然没解决HTTP的问题。
2.Comet
通常客户端发送请求给服务端,服务端做出处理后会立即响应。而Comet则先将请求挂起,直到服务端资源更新,然后立即返回响应,这是通过延迟应答,模拟服务端向客户端推送的功能。
缺点:虽然内容做到了实时更新,但是一次连接变长,消耗更多的资源,也没有实际的解决问题。
3.SPDY
SPDY并没有完全改写HTTP,它在应用层与传输层之间增加了会话层,考虑安全问题,SPDY规定通信使用SSL
SPDY 以会话层的形式加入,控制对数据的流动,但还是采用 HTTP建立通信连接。因此,可照常使用 HTTP 的 GET 和 POST 等方 法、Cookie 以及 HTTP 报文等
使用 SPDY 后,HTTP 协议额外获得以下功能:
多路复用:
通过单一的 TCP 连接,可以无限制处理多个 HTTP 请求。所有请求的处理都在一条 TCP 连接上完成,因此 TCP 的处理效率得到提高
赋予请求优先级:
SPDY 不仅可以无限制地并发处理请求,还可以给请求逐个分配优先级顺序。这样主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题
压缩 HTTP 首部:
推送功能:
支持服务器主动向客户端推送数据的功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
服务器提示功能:
服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求
使用浏览器进行全双工通信的WebSocket
一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接,之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送JSON、XML、HTML或图片等任意格式的数据
由于是建立在 HTTP 基础上的协议,因此连接的发起方仍是客户端,而一旦确立 WebSocket 通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文
WebSocket协议的主要特点
- 推送功能:服务端向客户端推送数据
- 减少通信量:一旦建立WebSocket连接就希望一直保持下去;报文首部信息小
为了实现 WebSocket 通信,在 HTTP 连接建立之后,需要完成一次“握手”(Handshaking)的步骤。
- 握手请求
用到 HTTP 的 Upgrade 首部字段,告知服务器通信协议发生改变,以达到握手的目的
- 握手响应
对于之前的请求,返回状态码 101 Switching Protocols 的响应
成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数据帧,而采用 WebSocket 独立的数据