Skip to main content

HTTP 状态机详解 — 为什么不能一次 recv 就解析完

·122 words·1 min· loading · loading · ·
GaleInk
Author
GaleInk
A Breezing Gale ~
Table of Contents
GaleWebServer 技术系列 - This article is part of a series.
Part : This Article

问题:TCP 是字节流
#

(一次 recv 可能只收到半个请求、\r\n 是唯一的边界标志)

状态机设计
#

(PARSE_REQUESTLINE → PARSE_HEADER → PARSE_BODY、主/从状态机分工)

get_line 的实现
#

(逐字节扫描 \r\n、截断返回、m_start_line 推进)

常见边界情况
#

(请求行超长、Content-Length 为 0、POST 体分包到达、keep-alive 复用连接)

容易踩的坑
#

m_read_idx / m_start_line / m_checked_idx 混淆、NO_REQUEST 时不能关连接)

参考资料
#

GaleWebServer 技术系列 - This article is part of a series.
Part : This Article