面试官总问我http,今天就来总结总结

浅聊一下

在面试中总被问到: httphttps 的区别,今天就来聊一下 http0.9 版本到 3.0 版本,最后到 https 究竟有哪些变化...

http

HTTP 是指超文本传输协议(Hypertext Transfer Protocol),它是用于在网络上传输和接收超文本的协议。在Web浏览器和Web服务器之间的通信中,HTTP被用来请求页面、发送和接收页面内容、提交表单数据等。HTTP是一种无状态协议,每个请求都是独立的,服务器不会在多次请求之间保留任何关于客户端的信息。HTTP通常使用TCP连接,在Web浏览器访问网页时,它是基础的通信协议。

http0.9

http0.9版本是上个世纪的产物,当时主要是科学家们用来传递研究成果,普通人家能用上的少之又少...

  • 流程
  1. 客户端发送GET请求,请求一个XXXXX/index.html文件
  2. 服务器接收到请求后,读取对应的HTML文件,以ASCII码的字符流返回给客户端
  • 特点
  1. 只有请求行,没有请求头和请求体
  2. 没有响应头
  3. 传输的内容是以ASCII的字符流形式传输的

http1.0

随着时代的发展,科学家们已经不满足于只能发送html类型文件了,于是http1.0版本诞生...

  • 特点
  1. 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还是存在很多问题的:

  1. TCP的慢启动: 拥塞控制算法导致一定会慢启动,慢启动导致页面关键资源加载时间推后
  2. 多条TCP连接竞争带宽导致每条TCP连接中能被分配的带宽大大降低
  3. 队头阻塞问题 前一个请求延迟,后一个请求便无法发送,导致带宽浪费

那么http2.0解决了什么问题:

  1. 一个域名只使用一个TCP长连接
  2. 将每一个请求分成一帧一帧的数据进行传输并打上编号,同时发送给服务端,且可以在重要资源请求中标记为加急,服务端接收到带有各种编号的数据帧后,可以区分哪个数据帧加急,优先整理和响应该请求的数据帧(通过引入了二进制分帧成实现多路复用)

http3.0

既然存在http3.0,那么说明http2.0还是存在缺陷:

  • 队头堵塞

http2.0基于TCP协议,那么当我们传输数据包时,如果有一个包丢失,那么TCP协议就会暂停传输后面的包,重新传输丢失的包,就会造成队头堵塞

  • TCP慢启动

拥塞控制算法导致一定会慢启动,慢启动导致页面关键资源加载时间推后

从上面我们可以发现,问题都是因为基于TCP协议而产生的,于是乎http3.0直接抛弃了TCP协议,而转头投靠了QUIC协议

  • QUIC协议

基于UDP协议,在UDP上实现了类似于TCP的多路数据流、可靠性传输等功能

  1. 实现了类似于TCP的流量控制和可靠性传输
  2. 集成了TLS加密功能
  3. 实现了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中的对称加密...什么是对称加密?有一个密码本,我根据密码本把想要对你说的话加密,写在小纸条上并且把密码本也一并通过快递寄给你,当你收到快递以后就可以根据密码本破译出我想对你说的话了,这就叫做对称加密,我有密码本,你也有密码本...但是要是我的快递中途被人偷了,那么我加密的话就会被被人按照密码本给破译出来,真是丢了老脸了...

  • 非对称协议
  1. 密钥生成

    • Alice和Bob各自生成一对非对称加密所需的密钥,每对密钥包括一个公钥和一个私钥。他们将自己的公钥公开,而私钥则保密。
  2. 加密消息

    • Alice想要向Bob发送一条加密消息。她获取Bob的公钥,并使用该公钥对消息进行加密。
  3. 发送加密消息

    • Alice将使用Bob的公钥加密后的消息发送给Bob。
  4. 解密消息

    • Bob收到加密消息后,使用自己的私钥进行解密。
    • 由于加密时使用了Bob的公钥,只有Bob的私钥才能成功解密,确保了通信内容的保密性。

结尾

http的内容总结到这里就差不多了...

相关推荐
用户5433081441943 分钟前
AI 时代,前端逆向的门槛已经低到离谱 — 以 Upwork 为例
前端
JarvanMo7 分钟前
Flutter 版本的 material_ui 已经上架 pub.dev 啦!快来抢先体验吧。
前端
恋猫de小郭34 分钟前
AI 可以让 WIFI 实现监控室内人体位置和姿态,无需摄像头?
前端·人工智能·ai编程
哀木38 分钟前
给自己整一个 claude code,解锁编程新姿势
前端
程序员鱼皮43 分钟前
GitHub 关注突破 2w,我总结了 10 个涨星涨粉技巧!
前端·后端·github
UrbanJazzerati1 小时前
Vue3 父子组件通信完全指南
前端·面试
是一碗螺丝粉1 小时前
5分钟上手LangChain.js:用DeepSeek给你的App加上AI能力
前端·人工智能·langchain
wuhen_n1 小时前
双端 Diff 算法详解
前端·javascript·vue.js
UrbanJazzerati1 小时前
Vue 3 纯小白快速入门指南
前端·面试
雮尘1 小时前
手把手带你玩转Android gRPC:一篇搞定原理、配置与客户端开发
android·前端·grpc