面试的角度通俗图解HTTP

👨‍🏫面试官:要不今天聊聊 HTTP 吧?

👨‍💻候选者:可以,我的理解是HTTP它是种客户端和服务器通信的格式,那你可能要问呢 那格式是啥?说白了就是双方约定好的一种协议,就好像你租房一样是吧,让我们双方能看的懂而已;这个交互实际上就是请求和饷应。其中包括最重要的是传包括文本在内的各式各样“消息”,另外呢,它也是种无状态的协议。

详细过程看下图

王道考研

👨‍🏫面试官:那你说的无状态你是咋理解的?

👨‍💻候选者:它的意思是服务器它不维护任何有关客户端发过来的请求消息。哈哈这其实是一种懒,对浏览器来说省事多了,并且状态协议会复杂一点,需要你维护状态(历史信息),并且如果客户或服务器失效,会产生状态的不一致,如果要解决这种不一致的代价会更高。

👨‍🏫 面试官:差不多,问你 HTTP 协议有哪些优点?

👨‍💻 候选者:扩展性强啊、速度快、跨平台支持性好。

👨‍🏫 面试官:HTTP 属于哪一层的协议啊?

👨‍💻候选者:它是应用层协议,用 TCP(传输层)作为底层协议,默认端口为 80

👨‍🏫 面试官:这些太简单,HTTP 通信过程能简单介绍一下不?

👨‍💻 候选者:明显八股文哈哈:

1 服务器在 80 端口等待客户的请求

2 浏览器发起到服务器的 TCP 连接,同时在本地创建套接字 Socket

3 服务器接收来自浏览器的 TCP 连接

4 浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息

5 关闭 TCP 连接

👨‍🏫面试官:还行,那你知道HTTP版本的区别吗?

👨‍💻候选者:各个之间的区别还是蛮大的,HTTP1.0 默认是短连接,每次和服务器交互,都需要断开又连;那么 HTTP1.1 版本最主要的是[默认持久连接]。只要你客户端服务器没有断开TCP连接,它就一直保持连接,你也可以发多次HTTP请求,非常的nice啊 1.1还有个就是[断点续传],啥意思呢?它是用HTTP消息头用分块的形式传编码,把实体分成块进行传。

HTTP1.1主要特点

👨‍💻候选者:1.1说完了,咱们摆下HTTP2.0,坑定高级许多,它不再用文本的方式传了,而是采用二进制来传,对头部进行了压缩,能进行流量控制,最主要就是HTTP/2它是支持多路复用,意思是通过单一的TCP连接并行发起多个的请求和响应消息。

👨‍🏫面试官:嗯,稍微打断你下。我知道HTTP1.1版本来有个管线化理论,但默认是关闭的。管线化这个跟HTTP2的多路复用是很类似的,它们有什么区别呀?

👨‍💻候选者:HTTP1.1提出的 管线化 只能串行(一个响应必须完全返回后,下个请求才会开始传输);而我说的HTTP2的多路复用是它利用分帧数据流,把HTTP协议分解为互不依赖的帧(给每个帧排好序然后发出去,接回来的时候按序重组),进而可以搞成乱序,注意发送的时候要避免一定的队列阻塞问题哈,也就是不要把先进先出这个顺序搞混了。

示意图

👨‍💻候选者:无论是HTTP1.1还是HTTP2,response饷应的处理顺序总是要跟request请求顺序保持一致的。假如某个请求的reponse饷应慢了,还是同样会有阻塞的问题,这什么原因呢,根本原因是HTTP底层的传输协议是TCP,没办法完全解决线头阻塞的问题哦

总的来说,做了如下总结

HTTP/1.1

  • 引入了持久连接,即 TCP 连接默认不关闭,可以被多个请求复用。

  • 分块传输编码,即服务端每产生一块数据,就发送一块,用” 流模式” 取代” 缓存模式”。

  • 管道机制,即在同一个 TCP 连接里面,客户端可以同时发送多个请求。

HTTP/2.0

  • 二进制协议,1.1 版本的头信息是文本(ASCII 编码),数据体可以是文本或者二进制;2.0 中,头信息和数据体都是二进制。
  • 完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。
  • 报头压缩,HTTP 协议不带有状态,每次请求都必须附上所有信息。Http/2.0 引入了头信息压缩机制,使用 gzip 或 compress 压缩后再发送。
  • 这个我没有说,是服务端推送,允许服务器未经请求,主动向客户端发送资源。

👨‍🏫面试官:嗯,好的。那你讲下 HTTP3 跟前面版本什么区别

👨‍💻候选者:最本质的是 HTTP1和2 的底层都是 TCP,而 HTTP3 它的底层是 UDP。使用HTTP3能够减少RTT(往返时延),还有他使用 QUIC 来保证 UDP可靠性。之前的HTTP/2是存在的一些问题,比如重传,请求饷应慢了,上面也说了都是由于 TCP 本身的特性导致的,所以HTTP/3在QUIC的基础上进行发展而来,QUIC(Quick UDP Connections)译为快速UDP网络连接,底层使用UDP进行数据传输,你说强不强?

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙哥手记

非常感谢你的赞赏,一起加油整起

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值