浅聊一下
在面试中总被问到: http
和 https
的区别,今天就来聊一下 http
从 0.9
版本到 3.0
版本,最后到 https
究竟有哪些变化...
http
HTTP 是指超文本传输协议(Hypertext Transfer Protocol),它是用于在网络上传输和接收超文本的协议。在Web浏览器和Web服务器之间的通信中,HTTP被用来请求页面、发送和接收页面内容、提交表单数据等。HTTP是一种无状态协议,每个请求都是独立的,服务器不会在多次请求之间保留任何关于客户端的信息。HTTP通常使用TCP连接,在Web浏览器访问网页时,它是基础的通信协议。
http0.9
http0.9版本是上个世纪的产物,当时主要是科学家们用来传递研究成果,普通人家能用上的少之又少...
- 流程
- 客户端发送GET请求,请求一个XXXXX/index.html文件
- 服务器接收到请求后,读取对应的HTML文件,以ASCII码的字符流返回给客户端
- 特点
- 只有请求行,没有请求头和请求体
- 没有响应头
- 传输的内容是以ASCII的字符流形式传输的
http1.0
随着时代的发展,科学家们已经不满足于只能发送html类型文件了,于是http1.0版本诞生...
- 特点
- http1.0版本引入了请求头和响应头,于是可以支持多种文件的数据传输
请求头: accept: text/html accept-encoding: gzip
响应头: content-encoding: br content-type: text/html ;charset=utf-8
在请求头中设置希望接收的文件类型,并且设置编码方式,响应头中告诉客户端自己的编码方式和返回的文件类型...
http1.1
随着时代的发展,http进入1.1阶段,此时普通人也能用得起电脑,http需要传输大量数据,但是由于一次TCP的三次握手以后,只能执行一次http请求,然后就要四次挥手释放连接,开销变的非常大,于是http1.1诞生
- 持久连接
当我建立连接以后,经过一次http传输,不立即断开连接,而是继续进行下一次http传输,可以设置Connection: keep-alive ||close 来控制持久连接是否开启
- Chunk transfer机制
在http1.0中,后端通过设置content-Length字段来告诉前端我传递的数据有多大,在http2.0中,出现了一个Chunk transfer机制:将数据分割成若干个任意大小的数据块,每个数据块标记好长度,最后发送一个长度为0的数据块来标志发送完毕
http2.0
http2.0的出现代表http1.1还是存在很多问题的:
- TCP的慢启动: 拥塞控制算法导致一定会慢启动,慢启动导致页面关键资源加载时间推后
- 多条TCP连接竞争带宽导致每条TCP连接中能被分配的带宽大大降低
- 队头阻塞问题 前一个请求延迟,后一个请求便无法发送,导致带宽浪费
那么http2.0解决了什么问题:
- 一个域名只使用一个TCP长连接
- 将每一个请求分成一帧一帧的数据进行传输并打上编号,同时发送给服务端,且可以在重要资源请求中标记为加急,服务端接收到带有各种编号的数据帧后,可以区分哪个数据帧加急,优先整理和响应该请求的数据帧(通过引入了二进制分帧成实现多路复用)
http3.0
既然存在http3.0,那么说明http2.0还是存在缺陷:
- 队头堵塞
http2.0基于TCP协议,那么当我们传输数据包时,如果有一个包丢失,那么TCP协议就会暂停传输后面的包,重新传输丢失的包,就会造成队头堵塞
- TCP慢启动
拥塞控制算法导致一定会慢启动,慢启动导致页面关键资源加载时间推后
从上面我们可以发现,问题都是因为基于TCP协议而产生的,于是乎http3.0直接抛弃了TCP协议,而转头投靠了QUIC协议
- QUIC协议
基于UDP协议,在UDP上实现了类似于TCP的多路数据流、可靠性传输等功能
- 实现了类似于TCP的流量控制和可靠性传输
- 集成了TLS加密功能
- 实现了HTTP2中的多路复用
那么为什么http3.0这么牛逼却还没大范围推广呢?这就不得不说到TCP协议僵化了...
- TCP协议僵化
TCP常用于物理层,一旦TCP修改(路由器,交换机,防火墙)全部失效,全部要更新,所以要用上http3.0需要一个长时间的积累
https
在http3.0中,我们聊到了TLS加密,那么TLS和我们的https有什么关系呢?
https = http + TLS
TLS
TLS(Transport Layer Security)是一种用于保护网络通信安全的协议。它建立在传输层之上,为数据通信提供了安全性、完整性和私密性。TLS主要用于Web浏览器和服务器之间的通信,以及其他应用程序之间的安全通信。
- 对称加密
TLS是一种加密协议,来看看TLS中的对称加密...什么是对称加密?有一个密码本,我根据密码本把想要对你说的话加密,写在小纸条上并且把密码本也一并通过快递寄给你,当你收到快递以后就可以根据密码本破译出我想对你说的话了,这就叫做对称加密,我有密码本,你也有密码本...但是要是我的快递中途被人偷了,那么我加密的话就会被被人按照密码本给破译出来,真是丢了老脸了...
- 非对称协议
-
密钥生成:
- Alice和Bob各自生成一对非对称加密所需的密钥,每对密钥包括一个公钥和一个私钥。他们将自己的公钥公开,而私钥则保密。
-
加密消息:
- Alice想要向Bob发送一条加密消息。她获取Bob的公钥,并使用该公钥对消息进行加密。
-
发送加密消息:
- Alice将使用Bob的公钥加密后的消息发送给Bob。
-
解密消息:
- Bob收到加密消息后,使用自己的私钥进行解密。
- 由于加密时使用了Bob的公钥,只有Bob的私钥才能成功解密,确保了通信内容的保密性。
结尾
http的内容总结到这里就差不多了...