spdy vs http + ocean

HTTP 协议的不足

  1. 单路连接 请求低效

  HTTP 协议的最大弊端就是每个 TCP 连接只能对应一个 HTTP 请求,即每个 HTTP 连接只请求一个资源,浏览器只能通过建立多个连接来解决。此外在 HTTP 中对请求是严格的先入先出(FIFO)进行的,如果中间某个请求处理时间较长会阻塞后面的请求。

  2. HTTP 只允许由客户端主动发起请求

  服务端只能等待客户端发送一个请求,在可以满足预加载的现状是一种桎梏。

  3. HTTP 头冗余

  HTTP 头在同一个会话里是反复发送的,中间的冗余信息,比如 User-Agent、Host 等不需要重复发送的信息也在反复发送,浪费带宽和资源。

SPDY 协议的优点

  1. 多路复用 请求优化

  SPDY 规定在一个 SPDY 连接内可以有无限个并行请求,即允许多个并发 HTTP 请求共用一个 TCP会话。这样 SPDY 通过复用在单个 TCP 连接上的多次请求,而非为每个请求单独开放连接,这样只需建立一个 TCP 连接就可以传送网页上所有资源,不仅可以减少消息交互往返的时间还可以避免创建新连接造成的延迟,使得 TCP 的效率更高。

  此外,SPDY 的多路复用可以设置优先级,而不像传统 HTTP 那样严格按照先入先出一个一个处理请求,它会选择性的先传输 CSS 这样更重要的资源,然后再传输网站图标之类不太重要的资源,可以避免让非关键资源占用网络通道的问题,提升 TCP 的性能。

  2. 支持服务器推送技术

  服务器可以主动向客户端发起通信向客户端推送数据,这种预加载可以使用户一直保持一个快速的网络。

  3. SPDY 压缩了 HTTP 头

  舍弃掉了不必要的头信息,经过压缩之后可以节省多余数据传输所带来的等待时间和带宽。

  4. 强制使用 SSL 传输协议

  Google 认为 Web 未来的发展方向必定是安全的网络连接,全部请求 SSL 加密后,信息传输更加安全。

  如何部署 SPDY?

  近日 Google 正式发布了适用于最流行 Web 服务器 Apache 的插件 mod_spdy,将其下载安装后你的 Apache 服务器就能使用 SPDY 协议与兼容 SPDY 协议的浏览器如 Chrome、FireFox 等进行通信。像之前所说的那样,SPDY 是运行在 HTTPS 上,非 HTTPS 流量并不会受到 mod_spdy 影响。如果要spdy最大范围的生效,也即我们要全站支持https,而且需要在server端加上对应模块。

http2

而Google也宣布将在2016年弃用SPDY,转而支持HTTP/2,HTTP/2是以SPDY为原型,经过十多个版本草案的讨论修改,到现在接近定稿,已经和SPDY有很大差异了。并且HTTP/2不会向后兼容SPDY。最新草案版本是第16版http://http2.github.io/http2-spec/

性能比较而言,这里有一篇文章:http://www.infoq.com/cn/news/2015/02/https-spdy-http2-comparison显示spdy和http2草案第14版均相比https有较大进步,但也说明spdy和http2不是一回事。

HTTP/2由标准化组织来制定,是基于SPDY的,主要差别是:

  1. 增加了HTTP/1.1 Upgrade的机制,可在TCP上直接使用HTTP/2,不像SPDY那样必须在TLS上。
  2. HTTPS连接时使用NPN的规范版ALPN(Applcation Layer Protocol Negociation)。
  3. 更完善的协议商讨和确认流程。
  4. 更完善的Server Push流程。
  5. 增加控制帧的种类,并对帧格式考虑得更细致。
  6. 有新算法HPACK专门压缩SPDY header block。

HTTP/2文档带有一些示例和详细说明,这是SPDY没有的。

说明如果现在支持spdy,将来至少要做代码的改造才能够支持http2,比如客户端的库,服务端的部署与库,并且由于http2不向后兼容spdy,因此暂不做调整也是ok的,毕竟只有一年时间。而且在服务端发布http2后,之前发布出去支持spdy的版本若未升级完成,收益也将终止。对于网站和公司层面的步调,支持spdy也肯定是小众的小范围工作,全站未切https之前,无法支持spdy;而且google chrome也将在2016年不再支持,考虑到全站切https之后的时间差,公司层面不会全面地支持spdy。如果做完了也就做完了,没有做完的话现在再做价值一般。

Ocean

Ocean是OAuth2的一个实现,主要解决的是认证授权的问题;app请求是作为消费者先发送到Ocean的,server的服务提供者在它后面,所有的http请求头需要Ocean进行配置。具体它有什么服务器架构?apache?nginx?前端必须有这类web服务器,后面的调用可以理解为是类似dubbo的配置方式暴露,web应用并不直接能改写http请求相关参数,只负责响应内容。

Ocean的namespace是指什么?是一个逻辑区分?可将某些namespace单独做部署。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章