前言

- 为什么要有追加协议?

为了弥补http协议的局限性。

- 什么是http协议的局限性?

http协议因为简单便捷而得到广泛使用,但是http协议的局限性随着互联网的发展日益捉襟见肘。本来呢,解决这些状况需要弄一套全新的协议,但是因为http协议已经遍布全球,无法完全摒弃http。所以在这种情况下,用于弥补http局限性的追加协议就诞生了。

http协议的瓶颈

  • 一条链接只能发送一次请求;
  • 请求只能从客户端开始。客户端不可以接收除响应以外的指令;
  • 首部未经压缩,延迟很大;
  • 发送冗长又重复的首部,造成浪费;
  • 可任意选择数据压缩格式。非强制压缩发

一些追加协议

Ajax:异步的JavaScript和XML

优点:通过 JavaScript 脚本语言的调用就能和服务器进行 HTTP 通信,通过这种手段从已加载完毕的web页面上发起请求,只更新局部页面。

缺点:可能导致大量请求产生;仍未解决http协议本身的问题

comet:延迟应答

优点:客户端的请求先不响应而是保存在服务器中,这样做服务器内容一更新就立马响应;

缺点:为了保留响应要消耗很多服务器资源;仍未解决http协议本身的问题

SPDY:从协议层面上消除http瓶颈

SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY 规定通信中使用 SSL;

采用http通信,可照常使用http方法和报文、cookie等;

优点:

  • 多路复用流:无限制处理多个http请求;
  • 请求优先级:是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题;
  • 压缩http首部:减少通信产生的字节数量
  • 推送功能:服务器可直接向客户端推送数据
  • 服务器提示功能:服务器可以主动提示客户端请求所需的资源;这样可以避免不必要的请求。

缺点:

  • 把该技术导入实际的 Web 网站进展不佳;
  • 还有很多web问题不是因为http瓶颈产生的;
  • SPDY 基本上只是将单个域名( IP 地址)的通信多路复用,所以当一个 Web 网站上使用多个域名下的资源,改善效果就会受到限制;

webSocket:web浏览器与服务器之间全双工通信标准

它不同于SPDY,是为了彻底解决HTTP瓶颈而实现的一套建立在http基础的新协议及API(如ajax和comit中的XMLHttpRequest附带的缺陷)

特点:

推送(服务器直接推送数据)、减少通信量(长连接、连接总开销减少、ws本身的首部信息也很小)

流程:

(1)握手请求:这里客户端要用到首部字段Upgrade来升级为webSocket协议;还要用到Sec-WebSocket-Key和Sec-WebSocket-Protocol等非标准首部字段;

(2)握手响应:服务器返回状态码101和相关字段确认连接成功;

(3)开始使用:连接成功后不再使用http数据帧,而开始使用webSocket数据帧;

API:webSocket有自己单独的Api,可以用js调用这些api

// 一个调用webSocket Api的例子

var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
setInterval(function() {
if (socket.bufferedAmount == 0)
socket.send(getUpdateData());
}, 50);
};

HTTP2.0:随着上面提到的这些新技术的出现,旧的http标准已经不再适用,http2.0随之诞生

特点:

SPDY;

HTTP Speed + Mobility;(用于改善并提高移动端通信时的通信速度和性能的标准)

Network-Friendly HTTP Upgrade;(主要是在移动端通信时改善 HTTP 性能的标准)

主要技术:

http2.0围绕着主要的7项技术进行讨论,现阶段大都倾向于采用以下协议的技术。

压缩 SPDY、Friendly
多路复用 SPDY
TLS义务化 Speed + Mobility
协商 Speed + Mobility,Friendly
服务器推送 Speed + Mobility
流量控制 SPDY
WebSocket Speed + Mobility