HTTP Study
HTTP
定义:在两点之间传输文本,视频,图片等超文本数据的协议和规范
来自
HTTP风险
窃听:
通信使用明文,https通过信息加密(混合加密)解决
对称加密和非对称加密
篡改:
无法验证报文的完整性,https通过校验机制(摘要算法)解决
摘要算法 + 数字签名
摘要算法算出内容的哈希值
但是有人把内容和哈希值一起更换了就看不出来内容被篡改过了,因为没有识别服务器的身份,所以采用非对称加密(私钥加密,公钥解密,加密的不是内容,而是哈希值)
但是如果有人把公钥和私钥都换了呢,也还是不安全,那就引入数字证书
冒充:
无法验证通信方的身份,https通过身份证书(服务器公钥放在数字证书里)解决
数字证书:
个人信息+公钥+数字签名
首先CA机构用自己的私钥进行加密,生成数字签名,在服务器发送信息时附带发送数字证书
流程:服务端发送信息+数字证书-----------------》客户端拿到数字证书后使用CA的公钥解密确认数字证书的真实性-----------》使用服务器公钥对报文进行加密后发送-----------》服务器使用私钥解密
HTTPS连接过程
-
客户端向服务器索要并验证服务器的公钥。
-
双方协商生产「会话秘钥」。
-
双方采用「会话秘钥」进行加密通信。
Client Random、Server Random、pre-master key在前面的交换过程中双方都已确认,由这三部分组成之后对称加密的密钥
HTTP的演进
HTTP1.1 VS HTTP1.0
改进:
-
长连接
-
支持管道传输,接下来的请求不需等待前面的应答返回即可发送
缺点:
-
只压缩了Body部分,头部不可压缩,首部信息对延迟有影响
-
因为基于请求-响应模式,服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端一直请求不到数据,会导致响应的队头阻塞(服务器响应慢的话,客户端会一直收不到数据)
-
服务器不能主动发送
HTTP2
基于HTTPS
改进:
-
头部压缩:发现多个请求头部相似会去掉重复部分;实现原理:客户端和服务端会维护一张头信息表,一个字段对应一个索引,之后发送索引号就可以
-
二进制传输:不是纯文本形式的报文,而是全面采用了二进制格式(增加了数据传输的效率)
-
数据流:可指定优先级
-
多路复用:通过 Stream 的并发能力实现并行传输,不用等待需要的返回数据全部加载完毕,可以先处理耗时短的请求(解决了队头阻塞问题,但是TCP层的队头阻塞问题并没有解决)
-
服务器可主动推送(减少了客户端的请求次数)
缺点:
-
TCP层的队头阻塞问题并没有解决:TCP 层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区里的数据返回给 HTTP 应用,一旦发生丢包,就会阻塞住所有的 HTTP 请求,这属于 TCP 层队头阻塞。
HTTP3
改进:
-
HTTP1.1通过管道解决了请求的队头阻塞,并没有解决响应的队头阻塞,HTTP2.0通过多个请求复用一个TCP连接解决了响应的队头阻塞但是没有解决TCP层面的阻塞,所以HTTP3使用UDP协议,基于QUIC实现可靠传输
QUIC特点:
-
无队头阻塞:(同一条TCP连接上可并发多个数据流),当某个流发生丢包只会阻塞自己,不影响其他
-
连接更快:对于HTTP1和HTTP2,先TCP握手再TLS握手