您的位置:首页 > 理论基础 > 计算机网络

HTTP学习笔记11 基于HTTP的追加协议

2018-02-24 21:06 543 查看

HTTP的瓶颈

一条连接上只能发送一个请求

请求只能从客户端开始,且其不可以接受除响应外的指令

请求/响应首部未经压缩就发送

发送冗长的首部,每次互相发送相同的首部造成浪费

可任意选择数据压缩格式,非强制压缩发送

解决方法

Ajax

利用JavaScript和DOM的操作,以达到局部Web页面替换加载的异步通信手段,其核心技术是名为XMLHTTPRequest的API,通过JavaScript脚本语言的调用就能和HTTP服务器进行通信。虽然其能实时向服务器获取内容,但其仍未解决HTTP协议本身存在的问题。

Comet

通过延迟应答,模拟实现服务器向客户端推送(Server Push)功能。通常,服务器接受到请求,在处理完毕后就会立即返回响应,但Comet会先将响应挂起,当服务器有内容更新时,再返回响应。但是,虽然内容上可以做到实时更新,但为了保留响应,一次连接的持续时间也变长了,因此维持连接会消耗更多的资源,也仍未解决HTTP协议本身的问题。

SPDY

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



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

多路复用流 通过单一的TCP连接,可以无限制处理多个HTTP请求

赋予请求优先级 可以给请求逐个分配优先级顺序,进行处理

压缩HTTP首部 压缩HTTP请求和响应的首部

推送功能 支持服务器主动向客户端推送数据的功能,不必等待客户端的请求

服务器推送功能 服务器可以主动提示客户端请求所需的资源

SPDY的不足:基本上只是对单个域名(IP地址)的通信多路复用,当Web网站上使用多个域名下的资源,改善效果就会受到限制

互联网工程任务组(IETF)对谷歌提出的SPDY协议进行了标准化,于2015年5推出了类似于SPDY协议的 HTTP 2.0 协议标准(简称HTTP/2)。谷歌因此宣布放弃对SPDY协议的支持,转而支持HTTP/2。因此SPDY不建议使用

WebSocket(全双工通信full-duplex)

WebSocket是建立在HTTP基础上的协议,一旦服务器与客户端建立起WebSocket通信连接,之后所有的通信都依靠该协议。通信过程中可互相发送JSON、XML、HTML或图片等任意格式的数据,无论服务器还是客户端,任意一方都可直接向对方发送报文。

具有以下特点:

推送功能 支持服务器向客户端推送数据的功能

减少通信量 只要建立起WebSocket连接,就希望一直保持连接状态

为了维持WebSocket通信,在HTTP连接之后,需要完成一次握手步骤

握手请求

GET /webfin/websocket/ HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==
Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13


Sec-WebSocket-Key字段记录着必不可少的键值,Sec-WebSocket-Protocol字段记录着使用的子协议

握手响应

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=
Sec-WebSocket-Protocol: chat


成功握手确立WebSocket连接之后,通信时不再使用HTTP数据帧,而采用WebSocket独立的数据帧,JavaScript可调用WebSocket的API,实现全双工通信

创建对象

var ws = new WebSocket(url,name);


url为WebSocket服务器的地址,name为发起握手的协议名称,为可选择项。

发送文本消息

ws.send(msg);


msg为文本消息,对于其他类型的可以通过二进制形式发送。

接收消息

ws.onmessage = (function(){...})();


错误处理

ws.onerror = (function(){...})();


关闭连接

ws.close();


HTTP2.0

HTTP/2(超文本传输协议第2版,最初命名为HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议(是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验)。

HTTP1.1的区别:

HTTP/2采用二进制格式而非文本格式。

在应用层(HTTP/2)和传输层(TCP or UDP)之间增加一个二进制分帧层。在该二进制分帧层中,HTTP2.0将传输的消息划分为更小的消息和帧,并采用二进制编码。其中HTTP1.1的首部信息被封装到HEADER frame,而请求实体被封装到DATA frame中。

HTTP/2是完全多路复用的,而非有序并阻塞的——只需一个连接即可实现并行

使用报头压缩,HTTP/2降低了开销(采用了HPACK压缩算法)

HTTP/2让服务器可以将响应主动推送”到客户端缓存中

WebDAV

WebDAV(Web 分布式创作和版本控制)是一个可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统,除创建、删除文件等基本功能外,还支持写文件锁定(Locking)及解锁(Unlock),文件的版本控制等功能。

概念

集合(Collection):统一管理多个资源,可以集合为单位进行各种操作

属性(Property):定义资源的属性,以“名称=值”的格式执行

锁(Lock):把文件设置为无法编辑状态

WebDAV 向HTTP/1.1追加了以下方法用于客户端与服务器通信:

PROPFIND 获取资源和集合的属性

PROPPATCH 修改资源和集合的属性

MKCOL 创建资源

COPY 复制资源

MOVE 移动资源

LOCK 资源加锁

UNLOCK 资源解锁

WebDAV 请求的一般结构遵循 HTTP 的格式,并且由以下三个组件构成:

1.方法。 声明由客户端执行的方法(上面描述的方法)。

2.标头。 描述有关如何完成此任务的指令。

3.主体(可选)。 定义用在该指令或其他指令中的数据,用以描述如何完成此方法。

在主体组件中,XML 成为整个 WebDAV 结构中的关键元素

下面的 WebDAV 请求将针对 MyServer.com 服务器上 WebDavDocs 集合中的 Webdav-xml.htm 文档设置 Author 属性:

PROPPATCH /WebDavDocs/webdav-xml.htm HTTP/1.1
Host: myserver.com
Content-Type: text/xml
Content-Length: 138

<?xml version="1.0">
<d:propertyupdate xmlns:d="DAV:" xmlns:o="urn:schemas-microsoft-
com:office:office">
<d:set>
<d:prop>
<o:Author>Sean Purcell</o:Author>
</d:prop>
</d:set>
</d:propertyupdate>


为了响应此请求,该服务器将发回一个响应,指出该属性已成功设置。

HTTP/1.1 207 Multi-Status
Server: Microsoft-IIS/5.0
Date: Wed, 04 Aug 1999 21:52:58 GMT
Content-Type: text/xml
Content-Length: 310

<?xml version="1.0"?>
<a:multistatus xmlns:b="urn:schemas-microsoft-com:office:office"
xmlns:a="DAV:">
<a:response>
<a:href>http://myserver.com/WebDavDocs/webdav-xml.htm</a:href>
<a:propstat>
<a:status>HTTP/1.1 200 OK</a:status>
<a:prop>
<b:Author/>
</a:prop>
</a:propstat>
</a:response>
</a:multistatus>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: