Apache处理HTTP请求分为连接建立、请求读取、路径映射、配置加载、访问控制、身份认证、内容生成与响应返回等阶段,全程由request_rec结构体携带状态,模块通过钩子在各阶段介入。

Apache 处理一个 HTTP 请求,不是简单地“收请求、发响应”,而是一套严格分阶段、模块可插拔、配置可继承的全流程。整个过程从连接建立开始,到日志落盘结束,每个环节都由特定模块在固定钩子上介入,状态通过 request_rec 结构体全程携带。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
连接建立与请求读取
客户端 TCP 连接就绪后,MPM(如 prefork/worker/event)将连接交由核心协议模块处理。关键函数 ap_read_request() 负责:
• 从 socket 读取原始字节流,解析出 HTTP 方法、URI、协议版本和所有请求头
• 对 URI 做初步解码(如 %20 → 空格)、路径标准化(移除 ./ 和 ../)
• 构建初始 request_rec,填充远程地址、Host 头、Content-Length 等基础字段
• 触发 post_read_request 钩子,供 mod_rewrite 或自定义模块做早期干预
路径映射与配置加载
URI 确定后,Apache 开始将其转化为实际资源,并加载对应配置:
• translate_name 阶段:执行 Alias、Redirect 或 RewriteRule,把 URL 映射为文件系统路径或代理目标
• map_to_storage 阶段:确认该路径是否指向真实文件、目录或 CGI 脚本;同时触发 ap_location_walk(),逐级合并主配置、虚拟主机、.htaccess 中的目录级指令
• 此过程支持多轮配置查找——先按原始 URI 查,再按重写后 URI 查,确保权限、认证等规则始终作用于最终目标
访问控制与身份认证
路径与配置明确后,安全校验按顺序展开:
• access_checker:基于 IP、时间、Referer 等执行粗粒度放行/拒绝(如 Require ip 192.168.1.0/24)
• check_user_id:调用 mod_auth_basic 或 mod_auth_digest 解析 Authorization 头,验证用户名密码
• auth_checker:检查该用户是否被授权访问当前资源(如 Require group editors)
• 任一环节失败,直接返回 403 或跳转登录页,不进入后续阶段
内容生成与响应返回
权限通过后,Apache 进入实际内容交付环节:
• type_checker:由 mod_mime 根据扩展名或内容推测 MIME 类型(如 .js → application/javascript)
• fixups:执行最后调整,如设置环境变量、添加响应头、启用压缩(mod_deflate 在此注册)
• handler:调用具体处理器——静态文件走 default-handler,PHP 走 mod_php 或 proxy_fcgi,CGI 走 mod_cgi
• logger:记录访问日志(mod_log_config),随后释放 request_rec 及关联内存池资源

















