HTTP协议

HTTP

HTTP 即超文本传输协议(HyperText Transfer Protocol)

HTTP 连接流程

  • 域名解析
  • 发起TCP的3次握手
  • Web浏览器向Web服务器发送http请求命令
  • Web浏览器发送http请求头信息
  • Web服务器应答
  • Web服务器发送应答头信息
  • Web服务器向浏览器发送数据
  • Web服务器关闭TCP连接

TCP连接在发送后将仍然保持打开状态,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

HTTP存在的问题

  • 窃听风险

  • 篡改风险

  • 冒充风险

HTTP各版本区别

HTTP1.x 版本数据传输是通过多个TCP实现的,同时最多开启的TCP可以达到6~8个

1.0

  • 无法长连接,请求完数据立即断开TCP

1.1

  • 引入了长连接,TCP可以被多个请求复用
  • 引入了管道机制,同一个TCP里面可以发送多个请求,但服务器还是顺序执行,可能会出现“队头阻塞”
1
2
3
4
5
HTTP1.1 遗留问题:  
1、头部没有压缩就发送,数据量大。多个请求的头部是一样的
2、服务器是按照请求的顺序响应的,会出现“队头阻塞”
3、没有请求优先级控制
4、服务器无法主动下发数据

2.0

  • 二进制格式
    头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧。
  • 数据流
    每个数据流都标记着一个独一无二的编号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数。
  • 优先级
    客户端还可以指定数据流的优先级。优先级高的请求,服务器就先响应该请求。
  • 多路复用
    一个连接中并发多个请求或回应,而不用按照顺序一一对应。
  • 头部压缩
    同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。
  • 服务器推送
    请求 HTML 的时候,就提前把可能会用到的 JS、CSS 文件等静态资源主动发给客户端,减少延时的等待
1
2
遗留问题:
1.x 是通过多个TCP传输数据的,2.0 改为单个TCP传输数据,当一个TCP丢包需要重发时,会阻塞HTTP请求

3.0

  • 将 TCP 改为 UDP

HTTPS

HTTPS = HTTP + SSL/TLS

改善

  • 信息加密
    混合加密的方式实现信息的机密性,解决了窃听的风险。
  • 校验机制
    摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 身份证书
    将服务器公钥放入到数字证书中,解决了冒充的风险。

概念

HTTS 采用混合加密方式(非对称加密 + 对称加密),建立连接时使用非对称加密,建立连接后使用对称加密。

非对称加密

拥有两个密钥,公钥和私钥。公钥加密,私钥解密,反过来,私钥加密,公钥解密。
特性:加解密慢(使用了大量的乘除法)。适用于一对多通信。安全性高,私钥是保密的。

对称加密

加密和解密使用同一个秘钥
特性:加解密快(只使用了位移操作)。适用于一对一通信。秘钥难分发,难管理。

数字摘要(摘要算法、哈希算法、散列算法)

采用单向Hash函数生成一个不可逆的“摘要”。
常用的数字摘要算法:MD5、SHA-1、SHA-2
特点:单向,不可逆

1
数字摘要保证了数据的唯一性,相同的文本得到的“摘要”一定相等,不相等的文本得到的“摘要”极小概率相等(哈希碰撞)

数字签名

明文 + 数字摘要 进行加密,得到的就是数字签名

1
数字签名保证了数据的完整性

数字证书

数字签名用CA(权威的认证机构)的私钥加密,得到数字证书

1
数字证书保证和数据的安全性

证书认证流程

证书解析流程

连接流程

参考文章

https://www.toutiao.com/a6802216564595622408