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 | HTTP1.1 遗留问题: |
2.0
- 二进制格式
头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧。 - 数据流
每个数据流都标记着一个独一无二的编号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数。 - 优先级
客户端还可以指定数据流的优先级。优先级高的请求,服务器就先响应该请求。 - 多路复用
一个连接中并发多个请求或回应,而不用按照顺序一一对应。 - 头部压缩
同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分。 - 服务器推送
请求 HTML 的时候,就提前把可能会用到的 JS、CSS 文件等静态资源主动发给客户端,减少延时的等待
1 | 遗留问题: |
3.0
- 将 TCP 改为 UDP
HTTPS
HTTPS = HTTP + SSL/TLS
改善
- 信息加密
混合加密的方式实现信息的机密性,解决了窃听的风险。 - 校验机制
摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。 - 身份证书
将服务器公钥放入到数字证书中,解决了冒充的风险。
概念
HTTS 采用混合加密方式(非对称加密 + 对称加密),建立连接时使用非对称加密,建立连接后使用对称加密。
非对称加密
拥有两个密钥,公钥和私钥。公钥加密,私钥解密,反过来,私钥加密,公钥解密。
特性:加解密慢(使用了大量的乘除法)。适用于一对多通信。安全性高,私钥是保密的。
对称加密
加密和解密使用同一个秘钥
特性:加解密快(只使用了位移操作)。适用于一对一通信。秘钥难分发,难管理。
数字摘要(摘要算法、哈希算法、散列算法)
采用单向Hash函数生成一个不可逆的“摘要”。
常用的数字摘要算法:MD5、SHA-1、SHA-2
特点:单向,不可逆
1 | 数字摘要保证了数据的唯一性,相同的文本得到的“摘要”一定相等,不相等的文本得到的“摘要”极小概率相等(哈希碰撞) |
数字签名
对 明文 + 数字摘要
进行加密,得到的就是数字签名
1 | 数字签名保证了数据的完整性 |
数字证书
数字签名
用CA(权威的认证机构)的私钥加密,得到数字证书
1 | 数字证书保证和数据的安全性 |