Http 网络协议

网络基础

tcp/ip协议族
ip协议
tcp协议
dns服务
uri与url

简单http协议

http不保存状态
持久链接节省流量:1.长连接(keep-alive); 2.管线话(pipeline)
使用cookie的状态管理

http报文内的http信息

请求报文与响应报文结构

编码提升传输速率:
1.压缩;
2.分块
Content-Type:
Range:获取内容范围
内容协商返回最合适的内容

返回结果状态码

2xx成功
3xx重定向
4xx客户端失败
5xx服务端失败

与http协作的web服务器

通信数据转发程序:代理、网关、隧道
代理:

使用代理服务器的理由:
1.利用缓存减少网络流量
2.访问控制

代理的分类:缓存代理、透明代理

网关:网关与代理很像,而网关能使通信线路上的服务器提供非http协议服务

http首部

首部字段格式:

首部字段名称:字段值
4种首部字段类型:

  1. 通用首部字段(General Header Fields)
  2. 请求首部字段
  3. 响应首部字段
  4. 实体首部字段

Cookie:Cookie的工作机制是用户识别状态管理
用户识别本身也算一种状态管理。

确保web安全的https

http协议中有可能存在信息窃听与身份伪装等安全问题,使用https可以有效地防止这些问题。
http的缺点:

  • 使用明文通信,信息有可能被窃听
  • 不验证通信方,有可能遭遇身份伪装
  • 无法验证报文的完整性,有可能信息被篡改

http + 加密 + 认证 + 完整性保护 = https

加密方式:

  1. 对称密钥加密:只有一个密钥,加解密都使用同一个密钥
  2. 非对称密钥加密,包含公钥与私钥,公钥是公开的,任何都可以获取,用于加密,私钥用于解密

https采用混合加密机制:

  1. 使用非对称加密方式交换稍后在对称密钥加密要使用的私有密钥
  2. 在确保交换的私钥安全的前提下,使用对称密钥加密方式加密

证明公开密钥正确性的证书

但是非对称密钥加密还是存在一些问题:无法证明公钥是货真价实的公钥

为了解决上述问题,可以使用数字证书认证机构(CA,Certificate Authority)和其相关的机构颁发的公开密钥证书

https的安全通信机制

  1. 客户端发送Client hello 报文开始SSL通信,报文中包含支持的SSL版本、加密组件列表(所使用的加密算法级以及密钥长度)
  2. 服务端可以进行SSL通信时,会以Server Hello报文作为应答,报文中包含SSL版本、加密组件,加密组件是从接收到的客户端加密组件列表中筛选出来的。
  3. 之后服务端发送Certificate报文,包含公开密钥的证书
  4. 最后服务器发送Server Hello Done 报文通知客户端,最初阶段的SSL握手协商部分结束
  5. SSL握手结束后,客户端以 Client Key Exchange 报文作为回应,该报文包含通信加密中被称为Pre-master secret 的随机密码串。该报文已使用步骤3中的公钥进行加密
  6. 接着客户端会继续发送 Change Cipher Spec 报文,提示服务端后续的通信将使用 Pre-master secret 密钥加密
  7. 客户端发送Finished。该报文包含链接至今全部报文的整体校验值。此次握手是否成功,以服务端是否能正确解密该报文为准。
  8. 服务端发送 Change Cipher Spec 报文
  9. 服务端发送 Finished 报文
  10. 服务端与客户端的Finished报文交换完毕后,SSL链接就算是建立完成。此处开始进行应用层通协议信,即发送Http响应
  11. 应用层协议通信
  12. 最后由客户端断开SSL链接。断开连接时,客户端发送close_notify报文。

SSL速度慢:1、网络通信慢;2、大量消耗CPU及内存,导致处理速度慢

确认访问用户身份的认证

SSL客户端的认证步骤

  1. 服务器收到需要认证的资源请求,就会发送Certificate Request 报文,要求客户端提供客户端证书
  2. 客户端把客户端证书信息以Client Certificate报文的形式发送给服务端
  3. 服务端验证通过后,领取证书内的公开密钥,然后开始HTTPS通信

SSL客户端认证采用双因素认证

第一个认证因素的客户端证书,用来认证客户端计算机,另一个认证因素的密码则用来认证来自用户本人

基于表单认证

Session管理以及Cookie的应用
由于Http是无状态协议,已认证通过的用户状态无法在协议层面保存。即无法实现状态管理,于是可以使用Cookie来管理Session

基于HTTP功能追加的协议

消除瓶颈的SPDY协议

SPDY功能:

  1. 多路复用
  2. 赋予请求优先级
  3. 压缩HTTP首部
  4. 推送功能
  5. 服务器提示功能

全双工通信的WebSocket

WebSocket的主要特点:

  1. 推送功能
  2. 减少通信量

WebSocket握手过程

HTTP/2.0

改善用户使用Web是的速度体验