计算机网络:基于HTTP的功能追加协议,HTTP1.1与HTTP2.0
? 虽然HTTP协议十分的简单且便捷,但随着时代的发展,其功能使用上捉襟见肘的疲态已经逐渐凸显。接下来,我们来了解一下基于HTTP新增的功能的协议,HTTP1.1与HTTP2.0之间的变化,以及HTTPS与HTTP的区别
基于HTTP的协议
? 超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。即,在建立HTTP标准规范时,制订者主要想把HTTP当作传输HTML文档的协议。随着时代的发展,Web的用途更具多样化,比如演化成在线购物网站,SNS(Social Networking Service,社交网络服务),企业或组织内部的各种管理工具,等等。
? 而这些网站所最求的功能可以通过Web应用和脚本程序实现。即使这些功能已经满足需求,但在性能上却未必最优,这是因为HTTP协议上的限制以及自身性能有限。
? 但又由于基于HTTP的Web服务器的使用环境已遍布全球,因此无法完全抛弃HTTP。故出现了一些新协议规则是基于HTTP的,并在此基础上添加了新的功能。
消除HTTP瓶颈的SPDY
? SPDY(取自SPeeDY,发音同speedy,意思是更快)是Google在2010年发布的基于传输控制协议(TCP)的应用层协议,开发组正在推动 SPDY 成为正式标准(现为互联网草案)。SPDY其开发目标旨在解决HTTP面临时代发展所出现的性能瓶颈,缩短Web页面的加载时间(50%)。
- SPDY - The Chromium Projects
? https://www.chromium.org/spdy/
HTTP的瓶颈
? 在Facebook和Twitter等SNS网站上,几乎能够实时观察到海量用户公开发布的内容,当几百,几千万的用户发布内容时,Web网站为了保存这些新增内容,在很短的时间内就会发生大量的内容更新。
? 这是就出现了一个问题,为了尽可能实时地显示这些更新的内容,服务器上一有内容更新,就需要直接把那些内容反馈到客户端的界面上,但HTTP却无法妥善地处理好这项任务。
? 如果我们使用HTTP协议探知服务器上是否有内容更新,就必须频繁地从客户端到服务器端进行确认,但如果服务器上没有内容更新,就会产生徒劳的通信。
HTTP协议目前所面临的瓶颈:
- 一条连接上可只发送一个请求(单路连接,请求低效)。
- 请求只能从客户端开始。客户端不可以接收除响应以外的指令(HTTP只允许由客户端主动发起请求)。
- 请求/响应首部未经压缩就发送。首部信息越多延迟越大。
- 发送冗长的首部。每次互相发送相同的首部造成的浪费较多。(HTTP头冗余)
- 可任意选择数据压缩格式。非强制压缩发送。
Ajax的解决方法
? Ajax(Asynchronous JavaScript and XML,异步JavaScript与XML技术)是一种有效利用JavaScript和DOM(Document Object Model,文档对象模型)的操作,以达到局部Web页面替换加载的异步通信手段。Ajax与以前的同步通信相比,由于它只更新一部分页面,响应中传输的数据量会因此减少。
? AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。
? AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。
? Ajax的核心技术是名为XMLHttpRequest的API,通过JavaScript脚本语言的调用就能和服务器进行HTTP通信。借由这种手段,就能从已加载完毕的Web页面上发起请求,只更新局部页面。
? 而利用Ajax实时地从服务器获取内容,有可能会导致大量请求产生。另外,Ajax仍未解决HTTP本身存在的问题。
注: AJAX 不是新的编程语言,而是一种使用现有标准的新方法。
Comet的解决方法
? 一旦服务器端有内容更新了,Comet不会让请求等待,而是直接给客户端返回响应。这是一种通过延迟应答,模拟实现服务器向客户端推送(Server Push)的功能。
? 通常,服务器端接收到请求,在处理完毕后就会立即返回响应,但为了实现推送功能,服务器会先将响应置于挂起状态,当服务器端有内容更新时,再返回该响应。因此,服务器端一旦有更新,就可以立即反馈给客户端。即,这种基于HTTP长连接,无须在浏览器端安插插件的“服务器推送”技术为“Comet”。
? 内容上虽然可以做到实时更新,但为了保留响应,一次连接的持续时间也变长了。期间,为了维持连接会消耗更多的资源。另外,Comet也仍未解决HTTP协议本身存在的问题。
Comet的优缺点
- 优点:实时性好(消息延时小);性能好(能支持大量用户)
- 缺点:长期占用连接,丧失了无状态高并发的特点。
SPDY的目标
? 陆续出现的Ajax和Comet等提高易用性的技术,一定程度上使HTTP得到了改善,但HTTP协议本身的限制也令人束手无策。为进行根本性的改善,需要有一些协议层面上的改动。
SPDY的设计和功能
? SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY规定通信中使用SSL。
? SPDY以会话层的形式加入,控制对数据的流动,但还是采用HTTP建立通信连接。因此,可照常使用HTTP的GET和POST等方法,Cookie以及HTTP报文等。
SPDY协议的优点
- 多路复用 请求优化
- 支持服务器推送技术
- SPDY压缩了HTTP头
- 强制使用SSL传输协议
使用SPDY后,HTTP协议额外获得以下功能。
? 通过单一的TCP连接,可以无限制处理多个HTTP请求。所有请求的处理都在一条TCP连接上完成,因此TCP的处理效率得到提高。
? SPDY不仅可以无限制地并发处理请求,还可以给请求逐个分配优先级顺序。这样主要是为了在发送多个请求时,解决因宽带低而导致响应变慢的问题。
? 压缩HTTP请求和响应的首部。这样一来,通信产生的数据包数量和发送的字节数就更少了,可以节省多余数据传输所带来的等待时间和带宽
? 支持服务器主动向客户端推送数据的功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
? 服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求。
HTTP1.1与HTTP2.0的区别
? 目前主流的HTTP/1.1标准,自1999年发布的RFC2616之后再未进行过改定。负责互联网技术标准的IETF(Internet Engineering Task Force,互联网工程任务组)创立httpbis工作组,其目标是推进下一代HTTP —— HTTP/2.0在2014年11月实现标准化。
? http2.0是一种安全高效的下一代http传输协议。安全是因为http2.0建立在https协议的基础上,高效是因为它是通过二进制分帧来进行数据传输。正因为这些特性,http2.0协议也在被越来越多的网站支持。
HTTP2.0:SPDY的升级版
? HTTP2.0可以说是SPDY的升级版(其实原本也是基于SPDY设计的),但是,HTTP2.0 跟 SPDY 仍有不同的地方
HTTP2.0和SPDY的区别:
- HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
- HTTP2.0 消息头的压缩算法采用 HPACK ,而非 SPDY 采用的 DEFLATE
HTTP2.0的特性
二进制分帧
? 在HTTP2.0中,在应用层(HTTP2.0)和传输层(TCP或UDP)之间加了一层:二进制分帧层。在二进制分帧层中,HTTP/2.0会将所有传输的信息分割为更小的消息和帧,并采用二进制格式的编码。
多路复用
? 在HTTP2.0中,TCP连接请求一旦建立,后续请求以stream的方式发送。每个stream的基本组成单位是frame(二进制帧)。客户端和服务器可以把HTTP消息分解为互不依赖的帧,然后乱序发送,最后在另一端把他们重新组合。
header压缩
? HTTP1.1的header带有大量信息,而且每次都要重复发送,HTTP2.0使用HPACK头部压缩算法对header进行压缩。
服务端推送(server push)
? 同SPDY一样,HTTP2.0也具有server push功能。
HTTPS和HTTP的一些区别
? HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。
? 通常来说,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信。简而言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。
? 在采用SSL后,HTTP就拥有了HTTPS的加密,证书和完整性保护这些功能.
相关区别:
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
HTTPS的缺点:
- 相比于HTTP,网络负载可能会慢到2到100倍
- 加密通信会消耗更多的CPU及内存资源
|