跳到主要内容
版本:1.0

应用层:HTTP、HTTPS 与 DNS

4.1 HTTP 基础​

HTTP 报文结构:

  • 请求报文:请求行(方法 + URL + 版本)→ 请求头部 → 空行 → 请求体;
  • 响应报文:状态行(版本 + 状态码 + 短语)→ 响应头部 → 空行 → 响应体。

常用方法:GET(获取)、POST(提交)、PUT(整体替换)、DELETE(删除)、PATCH(部分更新)、HEAD(只要响应头)、OPTIONS(询问支持的方法,CORS 预检用)。

GET 与 POST 的区别:语义上 GET 幂等(获取不改状态)且可缓存,POST 不幂等;GET 参数放 URL,POST 放 body;「GET 有长度限制」其实是浏览器和服务器的 URL 长度限制,HTTP 协议本身不限制;安全性上 URL 会记日志,都不算加密,机密数据一律走 HTTPS。

常见状态码(必背):

类别含义常见码
1xx信息101 Switching Protocols(WebSocket 升级)
2xx成功200 OK、204 无内容、206 断点续传
3xx重定向301 永久重定向、302 临时、304 命中协商缓存
4xx客户端错误400 请求语法错、401 未认证、403 禁止访问、404 未找到、405 方法不允许
5xx服务端错误500 内部错误、502 网关收到无效响应、503 服务不可用、504 网关超时

502 与 504 的区别(排障高频):两者都是网关/代理(如 Nginx)返回的——502 Bad Gateway 表示后端返回了无效响应或连接被拒(后端进程挂了、端口没人监听);504 Gateway Timeout 表示后端在超时时间内没返回(后端太慢、卡死、数据库慢查询)。

4.2 HTTP/1.1​

  • 长连接(Keep-Alive):默认开启,一个 TCP 连接可复用多个请求,避免每次都三次握手,降低时延与开销;
  • 管线化(Pipelining):可连续发多个请求不等响应,但因存在队头阻塞问题,浏览器默认禁用,实际很少用;
  • 队头阻塞(HOL Blocking):同一连接上请求必须按序处理,前一个响应慢会阻塞后面所有请求;浏览器用「开多个并行连接(6 个左右)」来缓解;
  • Cookie/Session:HTTP 无状态,用 Cookie(存客户端)维持会话状态。

4.3 HTTP 缓存(必考:强缓存 + 协商缓存)​

浏览器拿资源时的完整判断流程:

  1. 先查强缓存:未过期 → 直接使用本地缓存(状态 200,from cache),不发请求;
  2. 强缓存过期 → 发请求走协商缓存:带 If-Modified-Since / If-None-Match 询问服务器资源是否变了;
  3. 服务器判定未变 → 返回 304 Not Modified(无 body),浏览器继续用本地缓存;
  4. 资源变了 → 返回 200 + 新资源。

强缓存字段:

  • Cache-Control(HTTP/1.1,优先级高):max-age=秒(相对时间)、no-cache(跳过强缓存,直接协商)、no-store(完全不缓存)、public/private、s-maxage(仅代理缓存);
  • Expires(HTTP/1.0):绝对时间 Expires: Wed, 21 Oct 2026 07:28:00 GMT,受客户端时钟影响,优先级低于 Cache-Control。

协商缓存字段(两对,按优先级):

  • ETag / If-None-Match(优先):服务器给资源算唯一指纹(哈希),浏览器下次带上 If-None-Match: 指纹,服务器比对;
  • Last-Modified / If-Modified-Since:资源的最后修改时间,精度只有秒,且「内容没变但时间变了」会误判,所以 ETag 更准。

4.4 HTTP/2​

针对 HTTP/1.1 队头阻塞与头部冗余的四大改进:

  1. 二进制帧:报文拆成二进制帧传输(帧 = 最小单位),解析更高效;
  2. 多路复用:一条 TCP 连接上并行传输多个 Stream,彼此不阻塞,彻底解决 HTTP 层队头阻塞;
  3. 头部压缩(HPACK):客户端与服务端维护头部索引表,重复的头部只传索引;
  4. 服务器推送:服务器可主动推送客户端「将来可能需要」的资源(如 CSS)。

遗留问题:HTTP/2 只解决应用层队头阻塞,TCP 层队头阻塞仍在——任何一个 TCP 包丢失,整条连接上所有流都得等待重传。这催生了 HTTP/3。

4.5 HTTP/3(QUIC)​

  • 基于 UDP 重新实现可靠传输 + 加密,绕开 TCP 的历史包袱;
  • 彻底解决队头阻塞:不同 Stream 独立可靠传输,丢包只影响所在流;
  • 0/1-RTT 建连:把传输层握手与 TLS 握手合并,首次 1-RTT、重连可 0-RTT;
  • 连接迁移:用 Connection ID 标识连接而非「IP + 端口」四元组,Wi-Fi 切 4G 连接不断;
  • 拥塞控制可插拔,默认支持更优的算法。

4.6 HTTPS(必考)​

HTTP 明文的风险:窃听(内容裸奔)、篡改(运营商插广告)、冒充(假网站)——对应需要加密、完整性校验、身份认证。

加密体系:

  • 对称加密(AES/ChaCha20):加解密同一把钥匙,快,适合大量数据;难题是密钥如何安全分发;
  • 非对称加密(RSA/ECC):公钥加密、私钥解密,安全但慢,只用于交换对称密钥;
  • 混合加密方案:用非对称加密安全地协商出对称会话密钥,之后全程用对称加密通信。

数字证书与 CA:

  • 证书里存了什么:持有人信息(域名等)、持有人公钥、有效期、签发机构 CA、签名算法、CA 的数字签名(CA 用私钥对证书摘要加密生成);
  • 浏览器内置受信任 CA 的根证书(含公钥),收到服务器证书后用 CA 公钥验签,同时校验域名匹配、有效期、吊销状态(CRL/OCSP),全部通过才信任;
  • 证书链:根 CA → 中间 CA → 网站证书,逐级验签。

TLS 握手流程(以经典 RSA 密钥交换为例,TLS 1.2):

  1. ClientHello:客户端发送随机数 C、支持的 TLS 版本与加密套件;
  2. ServerHello:服务端发送随机数 S、选定套件 + 数字证书;
  3. 客户端验证证书 → 生成预主密钥,用服务器公钥加密后发送;
  4. 双方用「随机数 C + 随机数 S + 预主密钥」计算出相同的会话密钥;
  5. 之后所有应用数据用会话密钥对称加密传输。

(TLS 1.3 进一步优化为 1-RTT,握手即加密;重连可 0-RTT。)

中间人攻击与防御:攻击者伪造证书/代理流量冒充服务器。证书防中间人的原理:攻击者拿不到受信 CA 的私钥,伪造的证书验签不过;用户自己忽略证书告警才会中招。加固:HSTS(强制 HTTPS,防降级剥离)。

HTTPS 是四层还是七层? HTTPS = HTTP + TLS。TLS 工作在传输层之上、应用层之下(相当于 OSI 的表示层)。做负载均衡时:四层 LB 只透传加密流量(不解密),七层 LB 做 TLS 卸载(解密后再转发给后端)——这是运维场景的标准答法。

4.7 DNS:域名解析​

解析顺序(从浏览器输入域名开始):浏览器 DNS 缓存 → 系统缓存 / hosts 文件(优先级高于 DNS 服务器)→ 本地 DNS 服务器(运营商或公共 DNS 如 114.114.114.114、8.8.8.8)→ 若无缓存则代为迭代查询。

递归查询 vs 迭代查询:

  • 递归:客户端 → 本地 DNS:「你必须给我最终答案」(客户端只问一次);
  • 迭代:本地 DNS → 根服务器 → 顶级域(.com)服务器 → 权威 DNS(example.com 的 NS),逐级问「谁知道」,最后拿到 A 记录返回客户端。

常见记录类型:A(IPv4)、AAAA(IPv6)、CNAME(别名→另一域名)、MX(邮件)、NS(该域的权威服务器)、PTR(反向解析)。

DNS 用什么传输层协议:查询走 UDP 53(小报文、追求快);响应超过 512 字节或区域传送(zone transfer)用 TCP 53。

DNS 污染/劫持:污染——查询路径上的设备伪造应答返回假 IP;劫持——运营商 DNS 插广告。防御:用可信公共 DNS、DoH(DNS over HTTPS)、DoT(DNS over TLS)。

4.8 其他常用协议​

协议端口传输层要点
FTP21 控制 / 20 数据TCP明文、双连接(控制+数据),被动模式开放高位端口
SFTP22TCP基于 SSH 的文件传输,加密,与 FTP 是两套东西
SSH22TCP加密远程登录/隧道/端口转发,公钥认证
DHCP67/68UDP动态分配 IP,四步 DORA:Discover → Offer → Request → ACK
Telnet23TCP明文远程登录(不安全,被 SSH 取代)
SMTP/POP3/IMAP25/110/143TCP邮件发送 / 收取

4.9 高频面试题​

Q1:HTTP 缓存整套流程,浏览器拿到资源先看哪个? 先查强缓存(Cache-Control 优先于 Expires),未过期直接用;过期后走协商缓存(ETag/If-None-Match 优先于 Last-Modified/If-Modified-Since),命中返回 304。见 4.3。

Q2:HTTPS 握手过程,证书里面存了什么? 见 4.6:握手四步(随机数交换 → 证书 → 公钥加密的预主密钥 → 会话密钥);证书含持有人信息、公钥、有效期、签发 CA、签名算法与 CA 签名。

Q3:从浏览器输入域名到拿到 IP(DNS 解析全过程)? 缓存链(浏览器→系统→hosts)→ 本地 DNS 递归代查 → 根 → 顶级域 → 权威 → 返回 IP 并逐级缓存(TTL 控制缓存时长)。见 4.7。