一,基于Http的协议

在建立 HTTP 标准规范时,制订者主要想把 HTTP 当作传输 HTML 文 档的协议。随着时代的发展,Web 的用途更具多样性,比如演化成在 线购物网站、SNS(Social Networking Service,社交网络服务)、企 业或组织内部的各种管理工具,等等。

而这些网站所追求的功能可通过 Web 应用和脚本程序实现。即使这 些功能已经满足需求,在性能上却未必最优,这是因为 HTTP 协议上 的限制以及自身性能有限。
HTTP 功能上的不足可通过创建一套全新的协议来弥补。可是目前基 于 HTTP 的 Web 浏览器的使用环境已遍布全球,因此无法完全抛弃 HTTP。有一些新协议的规则是基于 HTTP 的,并在此基础上添加了新的功能。

二,Http的瓶颈

在 Facebook 和 Twitter 等 SNS 网站上,几乎能够实时观察到海量用户 公开发布的内容,这也是一种乐趣。当几百、几千万的用户发布内容 时,Web 网站为了保存这些新增内容,在很短的时间内就会发生大量 的内容更新。

为了尽可能实时地显示这些更新的内容,服务器上一有内容更新,就 需要直接把那些内容反馈到客户端的界面上。虽然看起来挺简单的, 但 HTTP 却无法妥善地处理好这项任务。 使用 HTTP 协议探知服务器上是否有内容更新,就必须频繁地从客户 端到服务器端进行确认。如果服务器上没有内容更新,那么就会产生 徒劳的通信。

若想在现有 Web 实现所需的功能,以下这些 HTTP 标准就会成为瓶 颈。

  • 一条连接上只可发送一个请求。
  • 请求只能从客户端开始。客户端不可以接收除响应以外的指 令。
  • 请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。
  • 发送冗长的首部。每次互相发送相同的首部造成的浪费较 多。
  • 可任意选择数据压缩格式。非强制压缩发送。

Ajax 的解决方法
Ajax(Asynchronous JavaScript and XML, 异 步 JavaScript 与 XML 技 术)是一种有效利用 JavaScript 和 DOM(Document Object Model,文 档对象模型)的操作,以达到局部 Web 页面替换加载的异步通信手 段。和以前的同步通信相比,由于它只更新一部分页面,响应中传输 的数据量会因此而减少,这一优点显而易见。

Ajax 的核心技术是名为 XMLHttpRequest 的 API,通过 JavaScript 脚本 语言的调用就能和服务器进行 HTTP 通信。借由这种手段,就能从已 加载完毕的 Web 页面上发起请求,只更新局部页面。 而利用 Ajax 实时地从服务器获取内容,有可能会导致大量请求产 生。另外,Ajax 仍未解决 HTTP 协议本身存在的问题。

Comet 的解决方法
一旦服务器端有内容更新了,Comet 不会让请求等待,而是直接给客 户端返回响应。这是一种通过延迟应答,模拟实现服务器端向客户端 推送(Server Push)的功能。

通常,服务器端接收到请求,在处理完毕后就会立即返回响应,但为 了实现推送功能,Comet 会先将响应置于挂起状态,当服务器端有内 容更新时,再返回该响应。因此,服务器端一旦有更新,就可以立即 反馈给客户端。

内容上虽然可以做到实时更新,但为了保留响应,一次连接的持续时 间也变长了。期间,为了维持连接会消耗更多的资源。另外,Comet 也仍未解决 HTTP 协议本身存在的问题。

三,消除Http瓶颈的SPDY

Google 在 2010 年发布了 SPDY(取自 SPeeDY,发音同 speedy),其 开发目标旨在解决 HTTP 的性能瓶颈,缩短 Web 页面的加载时间 (50%)。

  • SPDY - The Chromium Projects

http://www.chromium.org/spdy/

SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之 间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY 规 定通信中使用 SSL。 SPDY 以会话层的形式加入,控制对数据的流动,但还是采用 HTTP 建立通信连接。因此,可照常使用 HTTP 的 GET 和 POST 等方 法、 Cookie 以及 HTTP 报文等

四,SPDY的设计

使用 SPDY 后,HTTP 协议额外获得以下功能。

  • 多路复用流
  • 通过单一的 TCP 连接,可以无限制处理多个 HTTP 请求。所有请求 的处理都在一条 TCP 连接上完成,因此 TCP
    的处理效率得到提高。
  • 赋予请求优先级
  • SPDY 不仅可以无限制地并发处理请求,还可以给请求逐个分配优先 级顺序。这样主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题。
  • 压缩 HTTP 首部 压缩 HTTP 请求和响应的首部。这样一来,通信产生的数据包数量和 发送的字节数就更少了。
  • 推送功能
  • 支持服务器主动向客户端推送数据的功能。这样,服务器可直接发送 数据,而不必等待客户端的请求。
  • 服务器提示功能
  • 服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求。

五,SPDY消除web的瓶颈了吗?

希望使用 SPDY 时,Web 的内容端不必做什么特别改动,而 Web 浏 览器及 Web 服务器都要为对应 SPDY 做出一定程度上的改动。有好 几家 Web 浏览器已经针对 SPDY 做出了相应的调整。另外,Web 服 务器也进行了实验性质的应用,但把该技术导入实际的 Web 网站却 进展不佳。

因为 SPDY 基本上只是将单个域名( IP 地址)的通信多路复用,所 以当一个 Web 网站上使用多个域名下的资源,改善效果就会受到限 制。

SPDY 的确是一种可有效消除 HTTP 瓶颈的技术,但很多 Web 网站存 在的问题并非仅仅是由 HTTP 瓶颈所导致。对 Web 本身的速度提 升,还应该从其他可细致钻研的地方入手,比如改善 Web 内容的编 写方式等。

六,期盼已久的Http2.0

目前主流的 HTTP/1.1 标准,自 1999 年发布的 RFC2616 之后再未进 行过改订。SPDY 和 WebSocket 等技术纷纷出现,很难断言 HTTP/1.1 仍是适用于当下的 Web 的协议。

负责互联网技术标准的 IETF(Internet Engineering Task Force,互联网 工程任务组)创立 httpbis(Hypertext Transfer Protocol Bis,http://datatracker.ietf.org/wg/httpbis/)工作组,其目标是推进下一 代 HTTP——HTTP/2.0 在 2014 年 11 月实现标准化。

主要区别:

  • HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
  • HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE

七,Http2.0的特点

HTTP/2.0 的目标是改善用户在使用 Web 时的速度体验。由于基本上 都会先通过 HTTP/1.1 与 TCP 连接,现在我们以下面的这些协议为基 础,探讨一下它们的实现方法。

  • SPDY
  • HTTP Speed + Mobility
  • Network-Friendly HTTP Upgrade

HTTP Speed + Mobility 由微软公司起草,是用于改善并提高移动端 通信时的通信速度和性能的标准。它建立在 Google 公司提出的 SPDY 与 WebSocket 的基础之上。

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

HTTP/2.0 的 7 项技术及讨论
HTTP/2.0 围绕着主要的 7 项技术进行讨论,现阶段(2012 年 8 月 13 日),大都倾向于采用以下协议的技术。但是,讨论仍在持续,所以 不能排除会发生重大改变的可能性。

多路复用 (Multiplexing)

多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
众所周知,在http1.1协议中,浏览器客户端在同一时间,针对同一域名下的请求有一定的数量限制,超过限制,请求会被阻塞。

二进制分帧

在不改变Http1.x的语义,方法,状态码,RUI以及首部字段…的情况下,Http2.0是如何做到突破Http1.1的性能限制,改进传输性能,实现低延迟高吞度量呢。

关键之一就是在应用层和传输层之间增加了一个二进制分帧层

在二进制分帧层中,Http2.0会将传输的信息分割为更小的信息和帧(frame),并对它们采用二进制格式的编码,其中Http1.x的首部信息会被封装到Header frame,而相应的request body则封装到 data frame里面。

Http2通信都在一个连接上完成,这个链接可以承担任意数量的双向数据流。

在过去,Http性能优化的关键不在于高宽带,而在于低延迟。TCP连接会随着时间进行自我调谐,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度,这种调谐则被称为TCP慢启动,由于这种原因,让本来就不具备突发性和短时性的Http连接变得十分的低效。

Http2让所有数据流公用同一个连接,可以更有效地使用TCP连接,让高端带真正的服务于Http的性能提升。

总结:

  • 单链接多资源的方式,较少服务端的连接压力,内存占用少,连接吞吐量更大
  • 由于TCP连接的减少而是网络状态拥塞状况得以改善,同事慢启动时间的减少,使拥塞和丢包恢复速度更快。

首部压缩(Header Compression)

Http1.0并不支持首部压缩。为此SPDY和Http2.0应运而生,SPDY使用的是通用的default算法,而Http2.0使用了专门为首部压缩而设计的HPACK算法。

服务端推送(Server Push)

服务端推送是一种在客户端请求之前发送数据的机制,而在HTTP2中,服务器可以对客户端的一个请求发送多个相应。Server Push让Http1.x时代使用内嵌资源的优化手段变得没有意义,如果一个请求是由你的主页发起的,服务器很可能会相应主页内容,logo,以及样式表,因为他知道客户端会用到这些东西。这相当于在一个HTML文档内集合了所有的资源,不过与之相比,服务器推送还有一个很大的优势,可以缓存,也让在遵循同源的情况下,不同页面之间可以共享缓存资源成为可能。

八,WebSocket 的设计与功能

WebSocket,即 Web 浏览器与 Web 服务器之间全双工通信标准。其 中,WebSocket 协议由 IETF 定为标准,WebSocket API 由 W3C 定为 标准。仍在开发中的 WebSocket 技术主要是为了解决 Ajax 和 Comet 里 XMLHttpRequest 附带的缺陷所引起的问题。

一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接, 之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送 JSON、XML、HTML 或图片等任意格式的数据。

由于是建立在 HTTP 基础上的协议,因此连接的发起方仍是客户端, 而一旦确立 WebSocket 通信连接,不论服务器还是客户端,任意一方 都可直接向对方发送报文。

下面我们列举一下 WebSocket 协议的主要特点。

  • 推送功能
  • 支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发 送数据,而不必等待客户端的请求。
  • 减少通信量

只要建立起 WebSocket 连接,就希望一直保持连接状态。和 HTTP 相 比,不但每次连接时的总开销减少,而且由于 WebSocket 的首部信息 很小,通信量也相应减少了。

为了实现 WebSocket 通信,在 HTTP 连接建立之后,需要完成一 次“握手”(Handshaking)的步骤。

  • 握手*请求

为了实现 WebSocket 通信,需要用到 HTTP 的 Upgrade 首部字 段,告知服务器通信协议发生改变,以达到握手的目的。

Sec-WebSocket-Key 字段内记录着握手过程中必不可少的键值。 Sec-WebSocket-Protocol 字段内记录使用的子协议。

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

  • 握手*响应

对于之前的请求,返回状态码 101 Switching Protocols 的响应。

Sec-WebSocket-Accept 的字段值是由握手请求中的 SecWebSocket-Key 的字段值生成的。

成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数 据帧,而采用 WebSocket 独立的数据帧

参考:《图解HTTP》 https://www.zhihu.com/question/34074946

Http1.0 , SPDY , Http2.0相关推荐

  1. HTTP1.0、HTTP1.1和HTTP2.0的区别

    HTTP1.0.HTTP1.1和HTTP2.0的区别 文章目录 HTTP1.0.HTTP1.1和HTTP2.0的区别 一.HTTP的历史 二.HTTP的基本优化 三.HTTP1.0和HTTP1.1的区 ...

  2. HTTP1.0 、 HTTP1.1、HTTP2.0的主要区别

    HTTP1.0 VS HTTP1.1 长连接: HTTP1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接(PersistentConnection) ...

  3. HTTP1.0和HTTP2.0的区别,以及HTTP和HTTPS的区别

    一.HTTP1.0和HTTP2.0的区别 总的区别就是: HTTP/2采用二进制格式而非文本格式 HTTP/2是完全多路复用的,而非有序并阻塞的--只需一个连接即可实现并行 使用报头压缩,HTTP/2 ...

  4. Http和Https的区别、http1.0、http1.1、http2.0

    一.HTTP/HTTPS HTTP(HyperText Transfer Protocol:超文本传输协议),HTTPS(Hypertext Transfer Protocol Secure:超文本传 ...

  5. HTTP及其版本(HTTP1.0、HTTP1.1、HTTP2.0、HTTP3.0)详解

    目录 HTTP协议 基础知识 Http版本 Http1.0 Http1.1 Http2.0 Http3.0 总结 HTTP协议 基础知识 HTTP协议是超文本传输协议的缩写,是用于从万维网传输超文本到 ...

  6. HTTP1.0、HTTP1.1和HTTP2.0

    特性 HTTP1.0 HTTP1.1 HTTP2.0 持续连接 ✗ ✔ ✔ 断点续传 ✗ ✔ ✔ Host 头 ✗ ✔ ✔ 请求方法 GET.HEAD.POST 以上+ OPTIONS.PUT.DEL ...

  7. 【Http2.0】Http2.0

    序言 目前HTTP/2.0(简称h2)已经在广泛使用(截止2018年8月根据Alexa流行度排名的头部1千万网站中,h2占比约29%,https://w3techs.com/technologies/ ...

  8. 谈谈HTTP1.0,HTTP1.1和HTTP2.0区别

    >>>点击获取更多文章<<< HTTP定义 HTTP协议(HyperTextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏 ...

  9. http1.0和http1.1和http2.0有什么区别

最新文章

  1. 【PAT甲级 进制转换】1019 General Palindromic Number (20 分) Java版 7/7通过
  2. Java的原始数据类型一共就8个
  3. java从外部得到数据_java – 如何实现Observer以从侦听器获取数据?
  4. George Fox谈Adobe开发者社区与HTML5内容建设
  5. 感觉csdn论坛不是很好用,感觉……
  6. java可选参数_Java可选
  7. oracle:数据库对象:创建用户和赋予权限,数据表,序列,事务,约束
  8. PHP开启输出错误信息
  9. idea官网下载地址
  10. [Openstack] 使用heat模板创建stack
  11. 优秀员工的十二种品质 - 马云在上海演讲说的话
  12. Linux与数据结构 2019-4-14
  13. mysql general bin区别_MySQL_Mysql常见问题集锦,1,utf8_bin跟utf8_general_ci的区别 - phpStudy...
  14. Python 实现哥德巴赫猜想
  15. maven打包失败解决方案
  16. 地球引擎初级教程——JavaScript 简介(一文读懂如何使用GEE)
  17. 第二证券|钠离子电池将迎来量产 22股净利有望高增长
  18. java中几种创建对象的方式
  19. pycharm中创建包时加入的_init_.py文件及_all_的作用
  20. 比较好的开源人脸识别软件

热门文章

  1. 【Vegas2010】1月24日-钢琴教材从零起步的进阶选取
  2. Q4营收远超市场预期,唯品会回归“百亿美元大户”躲过倒春寒?
  3. Cesium淹没分析(干货)
  4. leetcode买卖股票问题(思路、方法、code)
  5. 《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——3.2 ZigBee...
  6. 搭建简单的Netty开发环境
  7. LUNA 黑天鹅事件:Terra CEO关于项目应急方案的社区AMA
  8. 软件项目该如何接?(转自速用)
  9. html跳转京东app,iOS APP 跳转到京东详情页面
  10. Windows常用快捷键,及控制台cmd的常用命令