HTTP协议的缺点
- 通信使用明文,内容可能被窃听
- 不验证通信双方的身份,有可能遭遇伪装
- 无法验证报文的完整性,有可能已经遭到篡改
HTTPS
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
HTTPS不是应用层的新协议,只是HTTP通信接口部分用SSL和TLS协议替代。通常HTTP直接和TCP通信,当使用SSL时,则变成先和SSL通信,再有SSL和TCP通信。
HTTPS通信步骤
- 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本,加密组件列表(加密算法和密钥长度)
- 服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件是从接收到的客户端加密组件内筛选出来的
- 之后服务器发送Certificate报文。报文中包含公开密钥证书
- 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
- SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用3中的公开密钥进行加密
- 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密
- 客户端发送Finished报文,该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判断标准
- 服务器同样发送Change Cipher Spec报文
- 服务器同样发生Finished报文
- 服务器和客户端的Finished报文交换完之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求
- 应用层协议通信,即发送HTTP响应
- 最后由客户端断开连接。断开连接时,发送close_notify报文
在以上流程中,应用层发送数据会附加一种叫做MAC(Message Authenticate Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文的完整性。
基于HTTP协议的追加协议
SPDY
SPDY:旨在解决HTTP的性能瓶颈,缩短Web页面的加载时间。
HTTP的瓶颈
- 一条连接上只可发送一个请求
- 请求只能从客户端开始。客户端不可以接收除响应外的指令
- 请求/响应首部未经压缩就发送。首部信息越多延迟越大
- 发送冗长的首部。每次互相发送相同的首部造成的浪费较多
- 可任意选择数据压缩格式。非强制压缩发送
SPDY的设计与功能
SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与传输层之间通过新加会话层的形式运作,同时,SPDY规定通信中使用SSL。
功能:
- 多路复用流:通过单一的TCP连接,可以无限制地处理多个HTTP请求。
- 赋予请求优先级
- 压缩HTTP首部
- 推送功能:支持服务器主动向客户端推送数据的功能。
- 服务器提示功能:服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存的情况下,可以避免发送不必要的请求。
WebSocket
即web浏览器和Web服务器之间全双工通信标准。
-
握手-请求 为了实现WebSocket的通信,需要用到HTTP的Upgrade首部字段,告知服务器通信协议发生改变,以达到握手的目的。Sec-WebSocket-Key字段内记录着握手过程必不可少的键值,Sec-WebSocket-Protocol记录使用的子协议,子协议按WebSocket协议标准在连续分开使用时,定义那些连续的名称。 -
握手-响应 对于之前的请求,返回101 Switching Protocols的响应,Sec-WebSocket-Accept的字段值是由握手请求的Sec-WebSocket-Key生成的。 -
JS使用WebSocket API发送请求
var socket = new WebSocket('url');
socket.onopen = function () {
setInterval(function() {
if(socket.bufferedAmount == 0) {
socket.send(getUpdateData());
}
}, 50);
}
HTTP/2.0
- 多路复用
- TLS义务化
- 协商
- 客户端拉拽/服务端推送
- 流量控制
- WebSocket
WebDAV
WebDAV(Web-based Distributed Authoring and Versioning,基于万维网的分布式创作和版本控制) 是一个可对Web服务器上的内容直接进行文件复制,编辑等操作的分布式文件系统。它作为拓展HTTP/1.1的协议定义在RFC4918。 除了创建,删除文件等基本功能之外,它还具备文件创建者管理,文件编辑过程中禁止其他用户内容覆盖的加锁功能,以及对文件内容修改的版本控制功能。
WebDAV中拓展的概念
- 集合(Collection):是一种统一管理多个资源的概念。以集合为单位可进行各种操作。也可实现类似集合的集合这样的叠加
- 资源(Resource):把文件或者集合称为资源
- 属性(Property):定义资源的属性。定义以“名称 = 值”的格式执行
- 锁(Lock):把文件设置为无法编辑的状态。多人同时编辑时,可防止同一时间进行内容写入。
WebDAV内新增的方法和状态码
方法名 | 作用 |
---|
PROPFIND | 获取属性 | PROPPATCH | 修改属性 | MKCOL | 创建集合 | COPY | 复制资源和属性 | MOVE | 移动资源 | LOCK | 资源加锁 | UNLOCK | 资源解锁 |
状态码 | 含义 |
---|
102 Processing | 可正常处理请求,但目前是处理中状态 | 207 Multi-Status | 存在多种状态 | 422 UnProcessible Entity | 格式正确,内容有误 | 423 Locked | 资源已被加锁 | 424 Failed Dependency | 处理与某请求关联的请求失败,因此不再维持有依赖关系 | 507 Insufficient Storage | 保存空间不足 |
|