HTTP 超文本传输协议全解:Web 世界的通信规则

📅 2026/7/8 4:36:16
HTTP 超文本传输协议全解:Web 世界的通信规则
HTTPHyperText Transfer Protocol超文本传输协议是应用层最核心的通信协议之一是整个万维网的数据交互基础。它规定了客户端浏览器、APP与 Web 服务器之间的通信格式、交互流程与语义规则我们日常浏览网页、调用接口底层都依赖 HTTP 完成。一、核心基础认知1. 基本定位层级OSI 七层模型的应用层协议无需关心底层传输细节模型经典的请求 - 响应模型永远是客户端主动发起请求服务器被动返回响应底层传输HTTP/1.x、HTTP/2 默认基于TCP 协议默认端口号 80HTTPS 是 HTTP 的加密版本基于 TLS/SSL默认端口号 443HTTP/3 基于 UDP 协议的 QUIC 实现2. 三大核心特性无状态协议本身不记录请求的上下文信息每次请求都是独立的服务器默认不知道上一次请求的用户身份通过 Cookie/Session/Token 解决状态保持明文传输HTTP/1.x 报文是纯文本格式抓包可直接读取内容安全性差HTTPS 解决该问题可扩展通过自定义头部字段可以扩展能力比如鉴权、缓存、跨域规则都通过头部实现二、一次完整的 HTTP 请求流程从输入网址到页面加载HTTP 完整执行步骤域名解析通过 DNS 系统将域名解析为服务器的 IP 地址建立连接客户端与服务器完成 TCP 三次握手建立传输通道发送请求客户端构造 HTTP 请求报文发送给服务器服务端处理服务器解析请求报文执行业务逻辑查数据库、读文件等返回响应服务器构造 HTTP 响应报文将结果回传给客户端连接管理根据Connection头部决定保持长连接还是关闭连接客户端解析浏览器 / 客户端解析响应内容HTML、JSON、图片等完成渲染或业务处理三、HTTP 报文结构详解HTTP 报文分为请求报文客户端发和响应报文服务器发结构高度统一都由 4 部分组成起始行 头部字段 空行 实体主体1. 请求报文结构拆解请求行第一行格式为请求方法 请求URL HTTP版本请求头多行键值对描述客户端环境、请求参数、偏好设置空行单独一行CRLF用来标记头部结束是报文格式的强制分隔符请求体可选POST/PUT 等方法携带的业务数据JSON、表单等完整示例httpPOST /api/user/login HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Content-Type: application/json Content-Length: 48 Connection: keep-alive {username:test,password:123456}2. 响应报文结构拆解状态行第一行格式为HTTP版本 状态码 状态描述响应头多行键值对描述服务器信息、响应数据属性、缓存规则等空行分隔头部和响应体响应体返回的实际数据比如 HTML 页面、JSON 结果、图片二进制数据完整示例httpHTTP/1.1 200 OK Server: nginx Content-Type: application/json Content-Length: 65 Cache-Control: max-age3600 {code:0,msg:登录成功,data:{token:abc123xyz}}四、HTTP 请求方法HTTP/1.1 标准定义了 9 种请求方法每种方法对应不同的业务语义核心常用的有 5 种表格方法语义幂等性有无请求体典型场景GET获取资源是一般无打开网页、查询数据POST提交数据、创建资源否有登录、提交表单、新增数据PUT全量更新资源是有修改用户完整信息DELETE删除资源是一般无删除一条数据HEAD获取资源的元信息仅返回头部是无检查文件是否存在、获取文件大小幂等性同一个请求执行 1 次和执行 N 次对服务器资源的影响完全一致就叫幂等。高频考点GET 和 POST 的核心区别参数位置GET 参数拼接在 URL 后POST 参数放在请求体中幂等性GET 是幂等操作POST 是非幂等操作数据长度GET 受 URL 长度限制浏览器一般限制 2KB 左右POST 无严格长度限制缓存特性GET 请求可以被浏览器缓存POST 默认不可缓存安全性两者都不安全HTTP 明文只是 GET 参数更直观暴露在地址栏五、HTTP 状态码状态码是三位数字用来标记请求的处理结果共分为 5 大类1xx信息性状态码请求处理中表示请求已接收正在处理属于中间状态日常很少见。101 Switching Protocols切换协议比如升级 WebSocket2xx成功状态码200 OK请求成功最常见的成功状态201 Created资源创建成功POST/PUT 接口常用204 No Content请求成功但没有返回任何响应体3xx重定向状态码301 Moved Permanently永久重定向资源已永久迁移到新地址302 Found临时重定向资源临时在其他地址304 Not Modified协商缓存命中资源未修改客户端使用本地缓存4xx客户端错误状态码400 Bad Request请求格式 / 参数错误服务器无法解析401 Unauthorized未授权需要登录或有效凭证403 Forbidden服务器拒绝访问权限不足404 Not Found请求的资源不存在405 Method Not Allowed请求方法不被服务器支持5xx服务器端错误状态码500 Internal Server Error服务器内部错误代码异常502 Bad Gateway网关错误上游服务返回无效响应503 Service Unavailable服务不可用服务器过载或停机504 Gateway Timeout网关超时上游服务响应超时六、HTTP 版本演进1. HTTP/1.0默认短连接每次请求都要重新建立 TCP 连接请求结束就断开仅支持 GET、POST 等基础方法缺点连接建立成本高并发效率极低2. HTTP/1.1当前主流版本默认长连接Connection: keep-alive一个 TCP 连接可以串行发送多个请求新增 Host 头部支持一台服务器部署多个网站虚拟主机新增 PUT、DELETE、OPTIONS 等方法缺点请求串行执行存在队头阻塞—— 前一个请求阻塞后续所有请求都会被卡住3. HTTP/2.0二进制分帧报文不再是纯文本拆分为二进制帧解析效率更高多路复用一个 TCP 连接可以并行发送多个请求 / 响应解决应用层队头阻塞头部压缩HPACK 算法压缩重复头部减少传输体积服务器推送服务器可以主动向客户端推送资源缺点底层还是 TCPTCP 层的队头阻塞依然存在丢包会导致整个连接重传4. HTTP/3.0基于 UDP 实现的 QUIC 协议不再依赖 TCP彻底解决队头阻塞流之间独立单流丢包不影响其他流更快握手0-RTT/1-RTT 即可建立连接比 TCPTLS 快很多连接迁移网络切换WiFi 切 5G时连接不中断七、常用核心头部字段请求头Host目标服务器的域名虚拟主机必备User-Agent客户端标识浏览器、系统信息Accept客户端能接收的内容类型Content-Type请求体的数据格式如application/jsonCookie客户端携带的身份凭证Referer请求的来源页面地址响应头Server服务器软件类型nginx、ApacheSet-Cookie向客户端写入 CookieContent-Type响应体的数据格式Cache-Control缓存控制规则Location重定向的目标地址