您的位置:首页 > 理论基础 > 计算机网络

第9章 基于HTTP的功能追加协议

2017-04-20 16:37 459 查看
HTTP协议的瓶颈

为了让用户及时看到最新的消息,服务端一有更新就需要直接反馈到客户端,若想实现,那么HTTP标准则会成为瓶颈!

HTTP协议的瓶颈

一次连接只能发送一条请求。

请求只能从客户端发出,服务端不可以接受响应以外的指令。

请求/响应未经过压缩就直接发送,头部信息越多延迟越大。

发送冗长的头部,每次相同的头部造成的浪费较多。

可任意选择压缩格式。不强制压缩。

Ajax的解决办法

Ajax只请求部分内容,响应中传输的数据会因此减少,但是实时的获取内容依旧会产生大量的请求,所以Ajax实质上并没有解决HTTP协议的瓶颈问题。


Comet的解决办法

Comet发送请求之后会先将响应挂起,等服务端有更新之后在返回响应。这是一种通过延迟应答来实现服务端向客户端推送内容的策略(`server push`)。
但是客户端为了维持连接会消耗更多的资源,所以Comet也没有解决HTTP协议的瓶颈问题。


使用浏览器进行双工通信的WebSocket

WebSocket技术是为了解决
Ajax
Comet
XMLHttpRequest
隐患带来的问题而产生的。

WebSocket 协议

一旦服务端与服务端建立起`WebSocket`协议的通信,之后一切的通信都依靠这个专用的协议进行。
通信过程中可以发送JSON、XML、HTML或图片等任意格式的数据


WebSocket 功能

推送

服务端可以主动推送数据给客户端

减少通信量

只要建立起WebSocket通信,便一直保持连接减少了不必要的开销。另外头部相对于HTTP头部来说小很多。

为了实现WebSocket通信,在HTTP建立连接之后需要进行一次握手(
HandShaking
)。

握手-请求

需要在
Upgrade
头部字段中声明
WebSocket
告知服务器协议发生变化。

Sec-WebSocket-Key
记录着握手过程中必不可少的键值。

Sec-WebSocket-Protocol
记录使用的子协议。

子协议按
WebSocket
协议标准在连接分开使用时,定义哪些连接的名称。

握手-响应

对于之前的响应返回101(
Switching Protocol
)响应。

Sec-WebSocket-Accpet
是由请求头中的
Sec-WebSocket-key
字段的值生成的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: