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>
相关文章推荐
- 图解HTTP笔记(九)-基于HTTP的功能追加协议
- 基于libevent的http协议 学习笔记之认识基本函数(1)
- 基于http的追加协议、构建web内容的技术、web的攻击技术(9,10,11)
- HTTP 协议 学习笔记一
- 学习笔记分享(1),Http协议中Post方式与Get方式的传参形式
- HTTP详解--基于HTTP的功能追加协议
- http协议学习笔记
- iOS 学习笔记——0003(iOS之HTTP协议网络传输)
- 基于Tcp协议与基于Http协议的RPC简介笔记
- HTTP 协议 学习笔记一
- HTTP详解--基于HTTP的功能追加协议
- http协议学习笔记
- Http协议学习笔记
- Web服务及http协议_学习笔记
- http协议学习笔记
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之11-分类和协议——黑马 IOS 技术博客
- HTTP详解--基于HTTP的功能追加协议
- 基于Tcp协议与基于Http协议的RPC简介笔记
- CAN 学习笔记一_【基于STM32的CANopen通讯协议的实现】
- HTTP协议学习笔记