Https
使用 Https 能从协议上解决安全问题。全面升级到 Https 是目前业界的趋势。 下图是 Https 的处理过程简图:
WebSocket 协议
Http 协议是一种被动式的处理消息的方式。 app 很多场景下需要由服务器主动将数据推送到客户端。 使用 WS 协议维持客户端到服务器的长连接是一种很好的解决方案。 目前在 IM 或直播的场景下应用b
比较广泛。
WS 请求
WS 响应
上面两张图为 ws 协议请求和响应。
- 客户端发起一个 http 的 get 请求。
- 请求头中表示链接方式为升级(Connection: Upgrade) 到 websocket协议(Upgrade: websocket)
- Sec-WebSocket-Key: 为客户端生成的随机字符串(掩码值)
- Sec-WebSocket-Version: 13 表示使用 ws 1.3 版本。
- 响应码 101 表示协议切换成功, 协议升级到 websocket (Upgrade:websocket)
在看一下 ws 协议下的每帧数据组成:
每帧数据都包含 2byte 的头信息。
FIN 表示是否为最后一帧
RSV1/2/3 为扩展字段。客户端与服务器可以通过约定这几个字段的值实现协议上的附加操作, 比如是否开启数据压缩。
OP Code 为每一帧的操作类型。 比如当前帧是操作帧还是数据帧
MASK 0/1 表示是否设置了掩码
LENGTH 为数据包长度
在 2byte 头信息之后带上整个帧的真实数据。
Http2 协议
下一代 http 协议。 解决了诸多 http 下的问题, 被越来越广泛的应用。 我总结的也不太好, 详细参见另一篇博客HTTP 2.0的那些事
App 下的理想网络模型特点
App 的网络场景要比 pc 上复杂很多, 也不稳定的多。 对于 app 来说, 理想的网络模型特点应该要有:
- 低延时
- 安全
- 双向数据通道
在不同的场景下使用不同的工具去解决问题, 重点是要熟悉每种协议的特点,以及如何使用。