HTTP 协议详解 — 发展史、连接管理、无状态解决方案

概述

Day37 是 Web 应用层的基础篇,深入讲解 HTTP 协议概念与发展历程(HTTP/0.9 → HTTP/1.0 → Keep-Alive)、短连接到长连接的演进、无状态问题的三种解决方案(Cookie/Session/JWT 对比)、URL 结构与组成、HTTP 请求/响应报文格式与状态码分类、浏览器完整访问流程。

核心内容

HTTP 协议发展史

版本关键特性连接方式
HTTP/0.9仅 GET,纯文本短连接
HTTP/1.0POST/DELETE/PUT,超文本,头信息短连接(可 keep-alive)

长连接演进

  • 短连接问题:每个请求都要三次握手,高并发下消耗大
  • Keep-AliveConnection: keep-alive 请求保持连接,keepalive_timeout 控制超时

无状态三种解决方案

方案存储位置安全性集群友好
Cookie 独立客户端❌ 可篡改
Cookie+Session服务端❌ 需共享(Redis)
JWT客户端(Token)✅ 签名✅ 无状态
  • Session 共享方案:将 Session 存入 Redis 等共享存储
  • JWT:JSON Web Token,包含 Header + Payload + Signature,无状态认证

HTTP 报文结构

  • 请求报文:请求行(方法+URL+版本)+ 请求头 + 空行 + 请求体
  • 响应报文:状态行(版本+状态码+原因)+ 响应头 + 空行 + 响应体
  • 状态码分类:1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务端错误)

浏览器访问完整流程

DNS 解析 → TCP 三次握手 → TLS 协商(HTTPS)→ HTTP 请求/响应 → 浏览器渲染 → TCP 四次挥手

关联

  • 前驱:CDN 层(HTTPS/TLS 握手)
  • 后续:待创建 Web 应用层后续页面(SpringBoot/Tomcat/uwsgi)
  • 相关概念:TCP/IP 协议栈、进程控制下(三次握手/四次挥手)、Keep-Alive