Apache源代码全景分析第1卷

Apache源代码全景分析第1卷

体系结构与核心模块

暂无评价综合评分的显示会考虑用户真实性等多项因素,每部作品出现综合评分的时间不定。
7.950 评价豆瓣读书
春暖花开季 恰是读书时满500减300、满200减120、满100减60活动详情

作品简介

本书是“Apache源代码全景分析”的第1卷。书中详细讲解了Apache的基础体系结构和核心模块的实现机制,包括配置文件、模块化结构、多任务并发,以及网络连接和请求读取,其中多任务并发体系结构是本书分析的重点,讨论了Prefork、Worker及WinNT3种MPM。本书还重点介绍了Apache 2.0新引入的过滤器,包括过滤器的使用、实现,以及其中的数据组织形式——存储段和存储段组,剖析了Apache中常用的过滤器。本书深入挖掘分析Apache运行背后的实现机制和模块开发的细节,适合Apache模块开发者、希望了解内部细节的Apache管理员、Web服务器开发者、大规模服务器开发者学习和阅读。

众所皆知,Apache良好的模块化架构设计已经成为经典的服务器架构——易于扩展、易于维护。几乎每一个程序员都可以从Apache的架构中吸取到丰富的营养。虽然Apache的代码非常优美,架构层次非常清晰,但是在缺乏资料的情况下,开发人员想在短时间内读懂Apache架构和内部细节并不是一件容易的事情。在陷入迷茫和一头雾水之后,他们可能就会选择放弃,从而与Apache的优美架构失之交臂。

本书写作的目的就是通过阐述Apache源代码,将Apache的整体架构和内部机制呈现给读者,让更多的人了解和熟悉Apache架构。本书的另一个目的就是希望阐述Apache模块开发中会遇到的各种问题。

张中庆,计算机软件与理论硕士。拥有多年服务器端软件开发经验,关注大规模服务器设计技术,致力于开源技术的使用、分享和推广,《UNIX/Linux下curses库开发指南》作者之一。

梁雪平,计算机应用硕士,深圳职业技术学院讲师,优秀教师。目前研究方向为数据库挖掘相关理论,致力于开源技术在高校的使用和推广。

作品目录

  1. Apache源代码全景分析第1卷
  2. 前 言
  3. 第 1 章 Web服务器概述
  4. 1.1 WWW概述
  5. 1.1.1 Internet概述
  6. 1.1.2 超文本的概念
  7. 1.1.3 WWW的历史
  8. 1.2 HTTP服务器
  9. 1.2.1 HTTP服务器简介
  10. 1.2.2 HTTP服务器功能
  11. 1.2.3 WWW文档
  12. 1.2.4 工作方式
  13. 1.3 Apache功能
  14. 1.3.1 虚拟主机
  15. 1.3.2 内容协商
  16. 1.3.3 持续连接
  17. 1.3.4 缓存
  18. 1.3.5 访问控制和安全
  19. 1.3.6 动态内容生成
  20. 第 2 章 Apache体系结构
  21. 2.1 Apache目录
  22. 2.2 Apache层次结构
  23. 2.2.1 操作系统支持层
  24. 2.2.2 可移植运行库层
  25. 2.2.3 核心功能层
  26. 2.2.4 可选功能层
  27. 2.2.5 第三方支持库
  28. 2.2.6 Apache工具包
  29. 2.3 Apache核心功能层
  30. 2.3.1 核心与可选模块的关系
  31. 2.3.2 核心组件
  32. 2.4 Apache运行流程
  33. 2.4.1 Apache启动过程
  34. 2.4.2 HTTP连接处理
  35. 2.4.3 请求报文读取
  36. 2.4.4 请求处理
  37. 2.4.5 内容生成
  38. 2.4.6 关闭与重启
  39. 2.5 主程序main
  40. 2.5.1 主程序概要
  41. 2.5.2 主程序细节
  42. 第 3 章 配置文件管理
  43. 3.1 Apache配置系统
  44. 3.2 配置文件
  45. 3.2.1 配置文件类
  46. 3.2.2 配置文件处理时机
  47. 3.3 指令相关概念
  48. 3.3.1 指令概述
  49. 3.3.2 指令参数
  50. 3.3.3 指令上下文
  51. 3.3.4 指令参数类型
  52. 3.4 指令配置
  53. 3.4.1 指令结构
  54. 3.4.2 指令定义
  55. 3.4.3 预定义指令函数
  56. 3.4.4 指令表
  57. 3.5 Apache配置处理
  58. 3.5.1 指令保存
  59. 3.5.2 指令读取
  60. 3.5.3 配置指令处理
  61. 3.5.4 特殊指令
  62. 3.6 .htaccess处理
  63. 3.6.1 .htaccess使用场合
  64. 3.6.2 指令的覆盖
  65. 3.6.3 处理.htaccess
  66. 3.7 实现自己的配置段
  67. 第 4 章 Apache模块化体系结构
  68. 4.1 Apache模块概述
  69. 4.1.1 Apache模块组成
  70. 4.1.2 Apache核心与模块交互
  71. 4.2 Apache模块结构
  72. 4.3 模块的加载
  73. 4.3.1 模块变量
  74. 4.3.2 DSO(Dynamic Shared Object,动态共享对象)的概念
  75. 4.3.3 静态模块加载
  76. 4.3.4 动态模块加载
  77. 4.3.5 模块卸载
  78. 4.4 指令表
  79. 4.4.1 指令表概述
  80. 4.4.2 指令处理函数
  81. 4.4.3 指令共享
  82. 4.5 挂钩(HOOK)
  83. 4.5.1 为什么引入挂钩
  84. 4.5.2 声明挂钩
  85. 4.5.3 挂钩数组声明(APR_HOOK_LINK)
  86. 4.5.4 挂钩结构(APR_HOOK_STRUCT)
  87. 4.5.5 挂钩函数注册(APR_IMPLEMENT_EXTERNAL_HOOK_BASE)
  88. 4.5.6 使用挂钩
  89. 4.5.7 挂钩排序
  90. 4.5.8 可选挂钩
  91. 4.5.9 挂钩纵览
  92. 4.5.10 自己编写挂钩
  93. 4.6 模块与配置文件
  94. 4.6.1 概述
  95. 4.6.2 如何描述配置信息
  96. 4.6.3 目录相关配置(Per-Directory Config)
  97. 4.6.4 服务器配置(Per-Server Config)
  98. 4.7 配置存储和使用
  99. 4.7.1 配置向量
  100. 4.7.2 配置存储体系结构
  101. 4.7.3 虚拟主机配置存储
  102. 4.7.4 目录配置存储
  103. 4.7.5 Location配置存储
  104. 4.7.6 文件配置存储
  105. 4.7.7 总体存储示意
  106. 4.8 模块通信
  107. 4.8.1 简单通信方式
  108. 4.8.2 可选函数
  109. 4.8.3 提供者API
  110. 4.9 常用模块
  111. 4.9.1 缓存模块
  112. 4.9.2 URL映射模块
  113. 4.9.3 内容生成模块
  114. 4.9.4 安全模块
  115. 4.9.5 代理模块
  116. 4.9.6 其余模块
  117. 第 5 章 多任务并发处理
  118. 5.1 多进程并发处理
  119. 5.1.1 概述
  120. 5.1.2 MPM在Apache中的位置
  121. 5.2 MPM数据结构
  122. 5.2.1 记分板
  123. 5.2.2 终止管道(Pipe of Death)
  124. 5.3 Inetd:通用的多任务处理结构
  125. 5.3.1 服务器程序概述
  126. 5.3.2 INETD
  127. 5.4 预创建(Prefork)MPM分析
  128. 5.4.1 Leader/Follow模式
  129. 5.4.2 Prefork MPM概述
  130. 5.4.3 Prefork MPM实现
  131. 5.5 工作者(Worker)MPM分析
  132. 5.5.1 Worker MPM概述
  133. 5.5.2 Worker主进程
  134. 5.5.3 子进程管理
  135. 5.5.4 线程管理
  136. 5.5.5 信号处理
  137. 5.6 WinNT MPM分析
  138. 5.6.1 WinNT MPM概述
  139. 5.6.2 完成端口相关概念
  140. 5.6.3 WinNT MPM主程序
  141. 5.6.4 监控主进程
  142. 5.6.5 工作进程
  143. 5.6.6 线程处理
  144. 第 6 章 网络连接
  145. 6.1 网络连接概述
  146. 6.1.1 网络连接上下文环境
  147. 6.1.2 等待连接
  148. 6.1.3 接受连接
  149. 6.1.4 创建连接
  150. 6.2 连接数据结构
  151. 6.3 等待连接
  152. 6.3.1 概述
  153. 6.3.2 套接字创建
  154. 6.3.3 套接字侦听
  155. 6.4 连接处理
  156. 6.4.1 连接处理概述
  157. 6.4.2 创建连接
  158. 6.4.3 连接处理
  159. 6.5 请求读取
  160. 6.5.1 请求读取概述
  161. 6.5.2 HTTP请求报文
  162. 6.5.3 request_rec结构
  163. 6.5.4 请求读取实现
  164. 6.5.5 请求行读取
  165. 6.5.6 请求头读取
  166. 6.5.7 网络IO读写
  167. 第 7 章 过滤器
  168. 7.1 过滤器概述
  169. 7.2 过滤器类型
  170. 7.3 过滤器结构
  171. 7.4 过滤器协议
  172. 7.5 过滤器使用
  173. 7.5.1 静态过滤器使用
  174. 7.5.2 动态过滤器使用
  175. 7.6 过滤器操作
  176. 7.6.1 过滤器注册概述
  177. 7.6.2 数据结构描述
  178. 7.6.3 过滤器结点
  179. 7.6.4 过滤器注册
  180. 7.6.5 过滤器的查找
  181. 7.6.6 添加过滤器至指定请求或连接
  182. 7.6.7 从连接中删除过滤器
  183. 7.6.8 过滤器初始化
  184. 7.7 智能过滤器
  185. 7.7.1 何谓智能过滤器
  186. 7.7.2 智能过滤器的使用
  187. 7.7.3 智能过滤器的实现
  188. 7.8 过滤器函数
  189. 7.8.1 输出过滤器
  190. 7.8.2 输入过滤器
  191. 第 8 章 存储段和存储段组
  192. 8.1 什么是存储段和存储段组
  193. 8.1.1 存储段和存储段组
  194. 8.1.2 为什么需要存储段组
  195. 8.2 存储段分配子
  196. 8.2.1 概述
  197. 8.2.2 分配子创建
  198. 8.2.3 存储段内存分配
  199. 8.2.4 存储段内存释放
  200. 8.3 存储段操作概述
  201. 8.3.1 存储段接口
  202. 8.3.2 存储段空接口
  203. 8.4 存储段类型
  204. 8.4.1 堆存储段(Heap Bucket)
  205. 8.4.2 内存池存储段(Pool Bucket)
  206. 8.4.3 文件存储段(File Bucket)
  207. 8.4.4 MMAP存储段(MMAP Bucket)
  208. 8.4.5 套接字存储段(Socket Bucket)
  209. 8.4.6 管道存储段(Pipe Bucket)
  210. 8.4.7 持久存储段(Immortal Bucket)
  211. 8.4.8 临时存储段(Transient Bucket)
  212. 8.4.9 刷新存储段(Flush Bucket)
  213. 8.4.10 流终止(EOS)存储段
  214. 8.4.11 HTTP错误存储段
  215. 8.5 存储段操作
  216. 8.6 存储段组操作
  217. 8.6.1 创建存储段组
  218. 8.6.2 存储段组的销毁
  219. 8.6.3 存储段组的分裂
  220. 8.6.4 统计存储段长度
  221. 8.6.5 存储段转换
  222. 8.6.6 数据写入
  223. 8.6.7 ap_r*函数写入
  224. 8.7 存储段组和过滤器
  225. 8.7.1 存储段组和过滤器的关系
  226. 8.7.2 获取存储段组
  227. 8.7.3 存储段组传递
  228. 第 9 章 常用过滤器
  229. 9.1 概述
  230. 9.2 输入过滤器
  231. 9.2.1 CORE_IN输入过滤器
  232. 9.2.2 HTTP_IN过滤器
  233. 9.2.3 创建自己的输入过滤器
  234. 9.3 输出过滤器
  235. 9.3.1 资源过滤器
  236. 9.3.2 内容过滤器
  237. 9.3.3 协议过滤器
  238. 9.3.4 编码转换过滤器
  239. 9.3.5 网络过滤器(CORE)
  240. 9.3.6 编写输出过滤器
载入中

大家都喜欢