MST

星途 面试题库

面试题:网络编程:HTTP协议拓展与复杂场景处理

在HTTP/2协议下,多路复用和首部压缩等特性如何改变了传统HTTP协议的工作方式?如果后端开发涉及到与老旧系统交互,需要在支持HTTP/2的同时兼容HTTP/1.1,你会采取怎样的策略和技术手段?
35.7万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

1. HTTP/2 特性对传统 HTTP 工作方式的改变

  • 多路复用
    • 传统HTTP:在HTTP/1.1中,每个TCP连接在同一时刻只能处理一个请求-响应,若要并发请求多个资源,需建立多个TCP连接,这会导致资源消耗大、连接管理复杂等问题,如浏览器为了并发获取网页资源会限制同时打开的连接数。
    • HTTP/2:引入多路复用,允许在一个TCP连接上同时存在多个请求-响应流。每个流都有唯一标识符,客户端和服务器可以对这些流进行独立控制,例如可以优先发送重要资源的请求,或者根据资源大小动态调整传输顺序,极大提高了资源传输效率,减少了延迟。
  • 首部压缩
    • 传统HTTP:HTTP/1.1的首部信息每次请求都需要重复发送,即便很多首部字段在多次请求中是相同的,这导致首部开销较大,浪费带宽。
    • HTTP/2:采用HPACK算法进行首部压缩。它通过建立静态和动态字典,对重复的首部字段进行索引,只需传输字典索引值而非整个首部字段,大幅减少了首部传输的字节数,提高了数据传输效率。

2. 支持HTTP/2同时兼容HTTP/1.1的策略和技术手段

  • 服务器端策略
    • 协议协商:使用ALPN(Application-Layer Protocol Negotiation),它允许客户端和服务器在TLS握手阶段协商应用层协议(如HTTP/1.1或HTTP/2)。服务器配置同时支持HTTP/1.1和HTTP/2,根据客户端的协商结果选择相应协议进行通信。
    • 双栈服务器:部署同时支持HTTP/1.1和HTTP/2的服务器软件,如Nginx、Apache等。服务器可以根据客户端请求的特性(如请求首部中的协议指示等)来决定使用哪种协议处理请求。
  • 应用层适配
    • 代理转发:在客户端和老旧系统之间设置代理服务器。代理服务器接收客户端请求,若客户端支持HTTP/2,代理服务器以HTTP/2与客户端通信,然后将请求转换为HTTP/1.1格式转发给老旧系统,响应则逆向处理。
    • 代码适配:在后端应用代码中,针对不同协议的请求,编写不同的处理逻辑。例如使用条件判断语句,根据请求协议版本调用不同的处理函数或模块,以确保与老旧系统的交互正常进行。