基于HTTP的功能追加协议

一、HTTP 的瓶颈

  1. 一条连接上只可发送一个请求。
  2. 请求只能从客户端开始。客户端不可以接收除响应以外的指令。
  3. 请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。
  4. 发送冗长的首部。每次互相发送相同的首部造成的浪费较

虽然HTTP协议既简单又简捷,但随着时代的发展,其功能使用上的疲态已经凸显。本章我们将讲解基于HTTP新增的功能的协议。

 

二、Ajax、Comet和SPDY

 

   

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

   

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

 
3、 SPDY技术:陆续出现的 Ajax 和 Comet 等提高易用性的技术,一定程度上使 HTTP得到了改善,但 HTTP 协议本身的限制也令人有些束手无策。为了进行根本性的改善,需要有一些协议层面上的改动

 

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

  • 多路复用流:一个TCP连接,可以处理无限多个HTTP请求;
  • 赋予请求优先级:解决因宽带低而导致响应变慢的问题。
  • 压缩HTTP首部;
  • 推送功能:支持服务器主动向客户端推送数据的功能。
  • 服务器提示功能:服务器可以主动提示客户端请求所需的资源。客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求

SPDY消除Web瓶颈了吗

  • 实际运用状态不佳
  • 只将单个域名的通信多路复用,因为SPDY基本上只是将单个域名的通信多路复用,当一个Web网站上使用多个域名下的资源,改善效果就会受限。
  • 并非所有瓶颈问题都是因为HTTP问题,所以还需要其他方面的改善。

 

三、使用浏览器进行全双工通信WebSocket

1、问题在于通信若使用HTTP协议,就无法彻底解决瓶颈问题。

  • WebSocket的设计与功能:解决XMLHttpRequest附带的缺陷引起的问题。
  • WebSocket协议:一旦服务器与客户端建立起该协议的通信,之后所有的通信都依靠这个专用协议进行。因为基于HTTP,因此发起方仍是客户端。
    • 推送功能
    • 减少通信量:连接就一直保持连接状态。和HTTP相比,不但每次连接时的总开销减少,由于WebSocket的首部信息很小,通信量也相应减少了。

2、WebSocket通信过程:

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

GET /chat HTTP/1.1 
Host: server.example.com 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== 
Origin: http://example.com 
Sec-WebSocket-Protocol: chat, superchat 
Sec-WebSocket-Version: 13
Upgrade: websocket  告知服务器通信协议发生改变,实现 WebSocket 通信
Sec-WebSocket-Key 字段内记录着握手过程中必不可少的键值。
Sec-WebSocket-Protocol 字段内记录使用的子协议

 

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

HTTP/1.1 101 Switching Protocols 
Upgrade: websocket 
Connection: Upgrade 
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= 
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Accept 的字段值是由握手请求中的 Sec- WebSocket-Key 的字段值生成的
 
成功握手确立 WebSocket 连接之后,通信时不再使用 HTTP 的数据帧,而采用 WebSocket 独立的数据帧。
 

3、WebSocket API

JavaScript 可调用“The WebSocket API”(http://www.w3.org/TR/websockets/,由 W3C 标准制定)内 提供的 WebSocket 程序接口,以实现 WebSocket 协议下全双工通 信。以下为调用 WebSocket API,每50ms发送一次数据的实例。

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

四、期盼已久的 HTTP/2.0

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

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

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

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

 

五、 Web服务器管理文件的WebDev

WebDAV(Web-based Distributed Authoring and Versioning,基于万维网 的分布式创作和版本控制)是一个可对 Web 服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统。它作为扩展 HTTP/1.1 的协议定义在 RFC4918

除了创建、删除文件等基本功能,它还具备文件创建者管理、文件编辑过程中禁止其他用户内容覆盖的加锁功能,以及对文件内容修改的版本控制功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值