面试中的网络协议(下:HTTP/HTTPS)

296 阅读8分钟

面试中的网络协议(下:HTTP/HTTPS)

HTTP协议概述

HTTP(HyperText Transfer Protocol)是应用层协议,用于客户端与服务器之间的通信。它定义了请求方法、状态码、报文格式等规则,支持文本、图片、音视频等多种数据传输。HTTP的演进经历了多个版本,核心目标始终是提升性能、安全性和灵活性

HTTP/0.9:简单超文本传输

HTTP/0.9诞生于早期网络环境,功能极为基础。它仅能传输小型HTML超文本,请求结构仅包含请求行,如“GET /index.html” ,无请求头和请求体。服务端响应也简单,没有返回头信息,且以ASCII字符流形式传输内容,应用场景局限于简单文本页面获取,无法满足复杂数据传输需求。

  • 特点
    • 仅支持GET方法,无请求头/响应头。
    • 返回内容为ASCII字符流,仅传输HTML。
  • 示例
    GET /index.html
    

HTTP/1.0:引入头信息与多类型支持

  • 1.0 需要解决的问题
  1. 浏览器需要知道服务器返回的内容是什么类型
  2. 浏览器需要知道服务器用的是什么压缩方式(文件越来越大需要压缩)
  3. 浏览器要能告诉服务器自己需要的语言类型
  4. 浏览器需要知道文件的编码类型
  • 改进
    • 增加请求头(AcceptUser-Agent)和响应头(Content-TypeContent-Encoding)。
    • 支持非ASCII编码(如图片、JS、CSS)。
    • 引入状态码(如200、404)。
  • 缺陷
    • 短连接:每次请求需新建TCP连接,效率低。
特性详情
请求头accept指定可接受媒体类型;accept-encoding表明支持的压缩方式;accept-language和accept-charset分别表示接受的语言和编码类型
响应头content-type说明返回数据类型;content-encoding是压缩方式;content-language是语言类型

此外,HTTP/1.0还引入了http状态码,不同范围的状态码代表不同含义:

状态码范围含义具体示例
2xxx成功状态201:成功创建资源;204:成功,但没有返回内容;205:成功,报文不包含实体;206:成功,报文只含有实体的一部分
3xxx重定向301:永久重定向;302:临时重定向;303:临时重定向,使用GET请求;304:协商缓存
4xxx客户端错误400:客户端请求错误(报文存在语法问题);401:未授权;403:禁止访问;404:未找到
5xxx服务器错误500:服务器内部错误;501:服务器不支持当前请求所需的某个功能;502:作为网关或代理的服务器从远程服务器接收到无效响应;503:服务器暂时超负载或停机维护,无法处理请求

HTTP/1.1:持久连接

1.1需要解决的问题

  • 1.0 缺陷: 每一次请求都要重新建立连接,浪费资源

改进

  1. 增加了 TCP 的持久连接(一个 TCP 连接中可传输多个 HTTP 请求)
  2. 允许同时建立 6 个 TCP 持久连接
  3. 增加了带宽优化机制(文件切片)
  4. 增加了 Host 字段(主机名)
  5. 客户端增加了 cookie
特性详情
连接改进引入持久连接,默认开启“Connection: keep-alive” ,允许同时建立6个TCP持久连接
新增功能增加host字段支持虚拟主机;客户端引入cookie用于状态管理;具备带宽优化机制
问题队头阻塞,前序请求未完成会阻塞后续请求
  • 缺陷
    • 队头阻塞:同一连接中前序请求未完成,后续请求被阻塞。
    • 带宽竞争:浏览器限制同一域名下最多6个TCP连接。

HTTP/2.0:二进制分帧与多路复用

2.0需要解决的问题

  • 1.1 的缺陷

    • 队头阻塞
    • 带宽利用率低 (100M应该有12.5M/s,但是只有2.5M/s)
  • TCP 的慢启动

  • 同时建立了 6 个 tcp 连接,导致每个连接之间竞争带宽

  • http队头阻塞

  • 改进

    • 二进制分帧层:将请求全部打包成帧,帧与帧之间互不干扰,并打上编号,服务端可以根据编号的优先级来处理加急请求
    • 多路复用:单连接内并行传输多个请求,解决队头阻塞。一个域名仅需建立一个TCP连接,请求和响应数据拆分成独立帧传输
    • 头部压缩:HPACK算法减少冗余头信息。
    • 服务器推送:主动推送静态资源(如CSS/JS)。
  • 局限

    • 仍依赖TCP协议,存在TCP层队头阻塞。

HTTP/2的多路复用类似“切水果装箱”——将请求切分为碎片(帧),独立传输后重组,避免因一个大文件阻塞整个连接。

HTTP/1.1存在队头阻塞和带宽利用率低的问题。HTTP/2.0采用多路复用技术,一个域名只需建立一个TCP连接。通过二进制分帧层,将请求和响应数据拆分成独立帧,帧间互不干扰且有编号,服务端按编号优先级处理,解决了HTTP层面的队头阻塞。同时,使用HPACK算法压缩头部,减少传输开销,并支持服务器推送静态资源。


HTTP/3.0

2.0需要解决的问题

  1. TCP 的队头阻塞(超时重传)
  2. TCP 的慢启动
  3. TCP 建立连接和关闭连接(耗时)
  4. TCP 协议僵化
  • 途径-底层协议:弃用TCP,改用UDP+QUIC协议。

    • QUIC: 基于UDP协议 - 多路复用 - 有序性 - 快速握手 - 可靠 - 加密传输 - 流量控制
  • 挑战

    • 网络设备对UDP支持不足,设备更换根本导致 3.0 没有普及开来,普及仍需时间。

HTTPS:安全的HTTP协议

HTTPS由HTTP与SSL/TLS协议组成,是HTTP的安全版本。TLS加密采用混合加密机制,非对称加密用于交换会话密钥,对称加密用于加密业务数据。

HTTPS = HTTP + SSL/TLS,通过加密传输身份验证保障数据安全。

HTTP与HTTPS对比

特性HTTPHTTPS
协议明文传输加密传输(SSL/TLS)
默认端口80443
安全性数据可被窃听/篡改防窃听、防篡改、身份认证
性能开销无加密开销,速度快加密计算增加延迟(优化后差异小)
SEO优化无加成搜索引擎排名优先

TLS加密:

  1. 对称加密:两边拥有相同的密钥,两边都知道如何解密

  2. 非对称加密:为了让两边拥有相同的密钥。过程如下:

    • 客户端生成 密钥
    • 服务端生成 公钥+私钥
    • 服务端将 公钥 发送给客户端
    • 客户端利用 公钥 加密 密钥 并传输给服务端
    • 服务端用私钥解开 公钥 得到 密钥

TLS加密流程

image.png

源网侵删

非对称加密用于交换会话密钥

  1. Client Hello:客户端发送支持的加密套件和随机数。
  2. Server Hello:服务端选择加密套件,返回数字证书和随机数。
  3. 证书验证:客户端验证证书合法性(CA机构签发)。
  4. 密钥协商:客户端生成预主密钥,用证书公钥加密后发送。
  5. 生成会话密钥:双方基于随机数和预主密钥生成对称密钥

对称加密用于加密业务数据。

  1. 加密通信:后续数据使用对称密钥加密传输。

面试常见问题解答

(一)HTTP队头阻塞解决办法

HTTP/2.0通过多路复用和二进制分帧解决队头阻塞。在一个域名下建立一个TCP连接,请求拆成带编号的帧独立传输,接收端按编号重组,避免单个请求阻塞整体连接。HTTP/3.0基于QUIC协议,实现多路复用独立流,每个请求流独立传输,从根本上解决队头阻塞。

(二)HTTP与HTTPS区别

从协议层面看,HTTP明文传输,HTTPS加密传输;默认端口上,HTTP用80,HTTPS用443;安全性上,HTTP易被窃听篡改,HTTPS有多重安全保障;性能方面,HTTP无加密开销速度快,HTTPS因加密有延迟但优化后差距缩小;SEO优化上,HTTPS更具优势。

(三)对HTTP 3.0的理解

HTTP 3.0是基于QUIC协议的新一代HTTP协议。它抛弃TCP选用UDP,解决了TCP的诸多弊端。QUIC协议使HTTP 3.0具备快速连接、多路复用、前业纠错、可靠有序传输等特性,大幅提升性能。但因UDP在网络设备支持上的不足,普及进度受限。

(四)HTTP状态码

1常见HTTP状态码

状态码含义典型场景
200请求成功正常返回网页或API数据
301永久重定向域名更换后跳转新URL
304协商缓存生效客户端资源未过期,直接使用缓存
404资源未找到请求的页面不存在
502网关错误后端服务无响应

总结

HTTP/HTTPS是Web通信的基石,其演进始终围绕性能、安全、兼容性展开。理解各版本特性、加密原理及协议差异,是应对网络协议面试题的关键。未来随着HTTP/3的普及,基于UDP的QUIC协议或将成为新一代标准。