HTTP/HTTPS协议 HTTP1.0、1.1、2.0区别 浅谈HTTP3.0和QUIC

参考链接一
参考链接二
参考链接三

HTTP协议版本区别

HTTP1.0和HTTP1.1的区别

1、长连接:HTTP1.1支持长连接和流水线(管道化)请求,在一个TCP连接上可发送多个请求开启和响应,减少了TCP连接和关闭连接的消耗和延迟,HTTP1.1默认开启长连接keep-alive,HTTP1.0则要在请求时使用keep-alive参数来建立长连接。
2、节约带宽:HTTP1.0浪费带宽,有时候客户端只想要对象的一部分,但是服务器却把整个对象传送过来了。HTTP1.1支持只发送Header,只有服务端认为客户端有权限时会返回100,客户端接收到100才会发送请求的body。
3、:如今随着虚拟主机的发展,一个物理服务器存在多个虚拟主机,共享同一个IP,HTTP1.1支持Host域,当域不存在时,就会返回400。
4、缓存处理:在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略
5、新增24个状态码:如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

HTTP1.1和HTTP2.0的区别

1、多路复用:支持同一个连接并发处理多个请求,也就是客户端发送多个请求,然后服务端再传回多个响应。HTTP2.0把每个请求/响应看做一个消息,把消息拆分成多个帧,每个帧都有序号,帧独立传输,传输完成后组装成消息。与HTTP1.1长连接的区别也在于这点,HTTP1.1基于FIFO处理请求,后面的请求必须等前面的请求响应完。
2、头部数据压缩:HTTP1.1由状态行、请求/响应头、消息体组成,HTTP1.1支持body的数据压缩,而HTTP2.0支持header压缩,减少了流量。
3、服务器推送:网页使用了诸如HTML、JS、图片的众多资源,HTTP1.1需要客户端挨个请求,而HTTP2.0支持客户端请求HTML,服务端在发送HTML的同时解析HTML并把其他资源响应给客户端,改善了延迟。

HTTP3.0和QUIC协议

HTTP2.0采用TCP连接,必不可免的产生了一些问题,比如说TCP连接时间长、拥塞控制、队头阻塞。因此Google大佬不太满意,想要尽可能修复这些问题并且保留HTTP2.0的优势,相比于TCP涉及到内核以及其它复杂的设计,Google选择开发UDP作为HTTP3.0的传输协议,HTTP3.0就是QUIC(Quick UDP Internet Connections)。

这里解释一下队头阻塞
TCP队头阻塞:TCP传输数据过程中如果丢失了某个TCP分节,接收端会保持后续分节,直到发送端重传丢失的分节,以保证数据传输的有序性。
HTTP队头阻塞:上面说HTTP1.1增加了管道化的设计,其实就是客户端可以连续发送HTTP请求报文而不用等响应报文,但是服务端必须按照请求的顺序发送响应报文,因此如果前面的响应延迟了,那么后续响应也会随之延迟,造成了HTTP队头阻塞的问题。
HTTP2.0解决队头阻塞:但是HTTP2.0通过消息和帧的方式解决了HTTP队头阻塞,也就是把每个请求/响应看做一个消息,把消息拆分成多个帧,每个帧都有序号,帧独立传输,传输完成后组装成消息。
但是TCP仍旧存在队头阻塞

HTTP和HTTPS区别

HTTPS时使用SSL/TLS协议加密的HTTP;
HTTPS需要申请CA证书;
HTTP端口为80,HTTPS端口为443.

HTTP工作流程

1、地址解析,使用DNS根据url获取IP地址
2、封装HTTP请求报文
3、建立TCP连接
4、客户端发送请求
5、服务端响应
6、断开TCP连接

对称/非对称加密

对称加密算法:
加密和解密都基于同一个算法
缺点:无法让双方同时持有同一个密钥
非对称:
(1)服务器生成一对公钥和私钥
(2)公钥发给客户端
(3)客户端发送经公钥加密后的数据
(4)服务端用私钥解密客户端经公钥加密后的数据
非对称+对称:
(1)服务器发给客户端一个公钥A1
(2)客户端发送经公钥A加密的密钥x
(3)服务端用私钥A2解密
(3)两方用密钥X传输数据
其它
中间人攻击:解惑公钥A1,并替换
数字签名:用到hash是因为固定长度的128位,增加非对称算法的效率
session id:保存了对应浏览器的密钥

HTTPS建立连接

1、建立TCP连接
2、客户端发送HTTPS请求
3、服务端响应数字证书(申请证书的公司、公钥、域名)
4、客户端检查数字证书,生成密钥,用服务端传送的公钥加密密钥,发送给服务端
5、服务端用私钥解密,然后双方用密钥加密消息进行数据传输

TLS握手

1、Client Hello:客户端发送TLS版本、客户随机数“client random”(用于秘钥)、加密方式、压缩方法、TLS版本
2、Server Hello:服务端发送服务端随机数“server random”、选择的加密方式、压缩方法、TLS版本、数字签名
3、客户端验证数字签名和证书
4、客户端发送另一个随机数“premaster secret”,并且这个随机数是用公钥加密的
5、服务端用私钥解密获得第三个随机数
6、服务端和客户端可以根据已知的三个随机数和加密方式,得到密钥
7、客户端和服务端都发送用密钥加密的‘finished’信息,表示TLS握手结束

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值