第 7 章 · 02 HTTP 请求解析与响应构造


文档摘要

第 7 章 · 02 HTTP 请求解析与响应构造 本节摘要:socket 收到的是原始字节流,本节讲怎么把它解析成结构化的 HTTP 请求(请求行+头+体),以及怎么构造 HTTP 响应(状态行+头+体)。HTTP 是纯文本协议——请求行 、头键值对到空行、可选体;响应同理。理解 HTTP 是文本协议,你就能用任何语言手写解析,不依赖框架。 内容来源:基于 HTTP 协议整理的导读,呼应姊妹篇《Linux 命令》第 7 章 curl。 学习目标 解析 HTTP 请求:请求行(方法+路径+版本)、头(键值对到空行)、体(按 Content-Length)。 构造 HTTP 响应:状态行(版本+状态码+原因)、头、体。 理解 HTTP 是纯文本协议,按行分隔。

第 7 章 · 02 HTTP 请求解析与响应构造

本节摘要:socket 收到的是原始字节流,本节讲怎么把它解析成结构化的 HTTP 请求(请求行+头+体),以及怎么构造 HTTP 响应(状态行+头+体)。HTTP 是纯文本协议——请求行 GET /path HTTP/1.1、头键值对到空行、可选体;响应同理。理解 HTTP 是文本协议,你就能用任何语言手写解析,不依赖框架。

内容来源:基于 HTTP 协议整理的导读,呼应姊妹篇《Linux 命令》第 7 章 curl。

学习目标

  1. 解析 HTTP 请求:请求行(方法+路径+版本)、头(键值对到空行)、体(按 Content-Length)。
  2. 构造 HTTP 响应:状态行(版本+状态码+原因)、头、体。
  3. 理解 HTTP 是纯文本协议,按行分隔。
  4. 说清常见状态码 200/301/404/500 的语义。

一、学习价值:HTTP 不神秘

很多人觉得 HTTP「被框架封装了」,神秘。其实它就是文本:请求是几行文本,响应是几行文本。亲手解析一遍,你不仅会造 Web 服务器,更懂得浏览器/curl 发出的请求长什么样、服务器返回的响应长什么样——这是调试 Web 应用的基本功。

二、子系统拆解

请求解析

GET /api/users?id=1 HTTP/1.1 ← 请求行: 方法 路径 版本 Host: localhost:8080 ← 头(键值对) User-Agent: curl/7.81 Content-Length: 0 ← 空行 = 头结束 (若有体, 按 Content-Length 读) ← 体

解析步骤:按 \r\n 切行;第一行是请求行(三段空格分);后续到空行是头(Key: Value);按 Content-Length 读体。

响应构造

HTTP/1.1 200 OK ← 状态行: 版本 码 原因 Content-Type: text/html ← 头 Content-Length: 13 ← 空行 Hello, world! ← 体

构造:状态行 + 头(含 Content-Length/Content-Type)+ 空行 + 体。

状态码语义

2xx 成功(200 OK)、3xx 重定向(301 永久)、4xx 客户端错(404 没找到、403 禁止)、5xx 服务端错(500 内部错误)。呼应姊妹篇《Linux 命令》第 7 章 curl 看状态码。

三、上手第一步

  1. recv 收完整请求(读到空行+按 Content-Length 读体)。
  2. 解析请求行与头。
  3. 根据「方法+路径」决定回应什么(先固定返回 200 Hello)。
  4. 构造响应 send 回去。

本节要点回顾

  1. HTTP 是纯文本:请求(请求行+头到空行+体)、响应(状态行+头到空行+体),按 \r\n 分行。
  2. 请求行:方法 路径 版本;状态行:版本 码 原因
  3. 体按 Content-Length 读;头是 Key: Value
  4. 状态码:2xx 成功、3xx 重定向、4xx 客户端错、5xx 服务端错。

推荐上手顺序

  1. recv 收请求,打印原始字节,直观看到 HTTP 文本格式。
  2. 解析请求行+头。
  3. 固定返回 200 Hello,用 curl -v 验证。
  4. 下一节:按路径分派(路由)。

下一节讲请求路由——把「方法+路径」分派到处理函数。


发布者: 作者: 灏天文库 转发
评论区 (0)
U