第1章 使用Apache進行應用程序開發(fā)
1.1 Apache Web服務器簡史
1.1.1 Apache 1
1.1.2 Apache 2
1.2 Apache軟件基金會
1.2.1 功績組織模式(Meritocracy)
1.2.2 角色
1.2.3 哲學理念
1.3 Apache開發(fā)流程
1.3.1 Apache代碼倉庫
1.3.2 開發(fā)者論壇
1.3.3 開發(fā)人員
1.3.4 參與Apache工作
1.4 Apache和知識產權
1.4.1 Apache許可證
1.4.2 第三方知識產權
1.5 進一步閱讀資料
1.5.1 交互式在線論壇
1.5.2 會議
1.5.3 網站
1.6 小結
第2章 Apache平臺和架構
2.1 縱覽
2.2 Apache運行的兩個階段
2.2.1 啟動階段
2.2.2 運行階段
2.2.3 停止階段
2.3 多處理模塊MPM
2.3.1 為什么需要MPM
2.3.2 UNIX類的MPM模塊
2.3.3 MPM模塊和操作系統(tǒng)
2.4 基本概念和數據結構
2.4.1 request_rec
2.4.2 server_rec
2.4.3 conn_rec
2.4.4 process_rec
2.5 其他的關鍵API組件
2.6 Apache配置基礎
2.7 Apache的請求處理
2.7.1 內容生成
2.7.2 請求處理階段
2.7.3 處理鉤子
2.7.4 數據軸和過濾器
2.7.5 處理的順序
2.7.6 處理鉤子
2.8 小結
第3章 Apache可移植運行時庫
3.1 APR
3.2 APR實用庫
3.3 基本的約定
3.3.1 參考手冊:API文檔和Doxygen
3.3.2 命名空間
3.3.3 聲明的宏
3.3.4 apr_status_t和返回值
3.3.5 條件編譯
3.4 資源管理:APR池
3.4.1 資源管理的問題
3.4.2 APR池
3.4.3 資源的生命周期
3.4.4 池的局限性
3.5 精選的APR主題
3.5.1 字符串和格式
3.5.2 國際化
3.5.3 時間和日期
3.5.4 數據結構
3.5.5 Bucket和Brigade
3.5.6 文件系統(tǒng)
3.5.7 網絡
3.5.8 編碼和密碼
3.5.9 URI處理
3.5.10 進程和線程
3.5.11 資源池
3.5.12 API擴展
3.6 APR/Apache中的數據庫
3.6.1 DMB和apr_dbm模塊
3.6.2 SQL數據庫和apr_dbd
3.7 小結
第4章 編程技巧和忠告
4.1 Apache編程約定
4.1.1 代碼行
4.1.2 函數
4.1.3 代碼塊
4.1.4 流控制
4.1.5 聲明
4.1.6 注釋
4.2 管理模塊數據
4.2.1 配置向量
4.2.2 生命周期域
4.3 模塊之間的通訊
4.4 線程安全的編程問題
4.5 管理持久數據
4.5.1 線程安全
4.5.2 內存/資源管理
4.6 跨平臺編程的問題
4.6.1 示例:創(chuàng)建一個臨時文件
4.7 跨MPM編程問題
4.7.1 進程和全局鎖
4.7.2 內存共享
4.8 安全編程問題
4.8.1 預防性原則:不要相信任何事情
4.8.2 拒絕服務攻擊:限制破壞
4.8.3 采用操作系統(tǒng)來幫助你
4.9 外部的依賴和庫
4.9.1 第三方的庫
4.9.2 庫的最佳實踐
4.9.3 使用庫構建模塊
4.10 使用其他語言編寫和編譯模塊
4.11 小結
第5章 開發(fā)內容生成器
5.1 HelloWorld模塊
5.1.1 模塊構架
5.1.2 返回值
5.1.3 處理器的字段
5.1.4 完整的模塊
5.1.5 使用request_rec對象
5.2 請求、響應和環(huán)境
5.2.1 I/O模塊
5.2.2 讀取表單數據
5.3 默認的處理器
5.4 小結
第6章 請求處理周期和元數據處理器
6.1 HTTP超文本傳輸協(xié)議
6.1.1 HTTP協(xié)議
6.1.2 解構HTTP請求
6.2 Apache的請求處理過程
6.2.1 映射至文件系統(tǒng)
6.2.2 內容協(xié)商
6.2.3 安全性
6.2.4 操作緩存
6.2.5 私有元數據
6.2.6 記錄日志
6.3 轉移請求:內部重定向
6.3.1 錯誤文檔
6.3.2 處理格式錯誤的請求和惡意請求
6.4 采集信息:子請求
6.4.1 示例
6.5 開發(fā)模塊
6.5.1 選擇文檔中不同的變量
6.5.2 錯誤處理和復用性
6.6 小結
第7章 AAA:訪問、認證和授權
7.1 安全
7.1.1 認證:安全的層次
7.1.2 登錄Web
7.2 AAA的概覽
7.3 Apache1.x和2.0中的AAA
7.4 Apache2.1/2.2中的AAA
7.4.1 基于主機的訪問控制
7.4.2 認證:check_user_id
7.4.3 密碼查詢(password lookup)
7.4.4 授權
7.5 AAA邏輯
7.5.1 認證和Require指令
7.5.2 拒絕訪問
7.5.3 認證方法
7.6 編寫AAA模塊
7.6.1 一個基本認證提供者
7.6.2 一個授權函數
7.6.3 配置
7.6.4 基本認證提供者和摘要認證提供者
7.7 實現一個定制的登錄機制
7.7.1 使用SQL進行會話管理
7.7.2 在沒有瀏覽器認證對話框時進行認證
7.8 小結
第8章 過濾模塊
8.1 輸入過濾器和輸出過濾器
8.2 內容過濾器、協(xié)議過濾器和連接過濾器
8.3 剖析過濾器
8.3.1 回調函數
8.3.2 流水線
8.4 過濾器API和對象
8.4.1 輸出過濾器
8.4.2 輸入過濾器
8.5 過濾器對象
8.6 過濾器輸入/輸出
8.7 巧妙的Apache 2.2過濾機制
8.7.1 預處理和后處理
8.7.2 mod_filter
8.7.3 過濾器的自配置
8.7.4 協(xié)議處理
8.8 示例:通過直接操作Bucket來過濾文本
8.8.1 Bucket函數
8.8.2 過濾器
8.9 復雜解析
8.10 使用現有的解析器進行過濾
8.11 類似stdio的過濾器輸入/輸出
8.12 輸入過濾器和Pull API
8.12.1 模式
8.12.2 阻塞(Block)
8.12.3 readbytes
8.12.4 輸入過濾器示例
8.13 小結
第9章 模塊配置
9.1 配置基礎
9.2 配置數據結構
9.3 管理模塊配置
9.3.1 模塊配置
9.3.2 服務器配置和目錄配置
9.4 實現配置指令
9.4.1 配置函數
9.4.2 示例
9.4.3 配置函數中的用戶數據
9.4.4 封裝配置函數
9.4.5 配置的作用域
9.4.6 配置函數類型
9.5 配置層次結構
9.6 配置函數中的上下文
9.6.1 上下文檢查
9.6.2 方法和
9.7 定制配置容器
9.8 可選的配置方法
9.9 小結
第10章 擴展API
10.1 在Apache中實現新的函數
10.1.1 導出函數
10.1.2 可選函數
10.2 鉤子與可選鉤子
10.2.1 進一步研究鉤子程序
10.2.2 執(zhí)行順序
10.2.3 可選鉤子示例:mod_authz_dbd
10.3 提供者API
10.3.1 實現
10.3.2 實現提供者
10.4 以服務方式提供API擴展
10.4.1 例子:mod_dbd
10.4.2 實現reslist
10.5 跨平臺API構建
10.5.1 使用預處理指令
10.5.2 聲明模塊API
10.6 小結
第11章 Apache數據庫框架
11.1 對新框架的需求
11.1.1 Apache 1.x/2.0和Apache 2.2
11.1.2 連接池
11.2 DBD架構
11.3 apr_dbd API
11.3.1 數據庫操作
11.3.2 API函數
11.4 使用ap_dbd API
11.5 一個示例應用模塊:mod_authn_dbd
11.6 開發(fā)一個新的DBD驅動
11.6.1 apr_dbd_internal.h頭文件
11.6.2 輸出驅動
11.6.3 驅動函數
11.7 小結
第12章 模塊調試
12.1 調試日志
12.1.1 錯誤日志
12.1.2 調試
12.2 在調試器中運行Apache
12.2.1 服務器的啟動和調試
12.2.2 調試和多道處理模塊MPM
12.2.3 追蹤沖突
12.2.4 調試核心Dump
12.3 特殊用途的Hook和模塊
12.3.1 標準模塊
12.3.2 重大異常模塊
12.3.3 處理反常運行的模塊
12.4 過濾器調試
12.4.1 mod_diagnostics
12.5 小結
附錄A Apache許可證
附錄B 貢獻者許可證協(xié)議
附錄C 超文本傳送協(xié)議:HTTP/1.1
本備忘錄狀態(tài)
摘要
1 概述
1.1 目的
1.2 要求
1.3 術語
1.4 操作概述
2 符號慣例和一般語法
2.1 擴充BNF
2.2 基本規(guī)則
3 協(xié)議參數
3.1 HTTP版本
3.2 統(tǒng)一資源標識符
3.3 日期/時間格式
3.4 字符集
3.5 內容編碼
3.6 傳送編碼
3.7 媒體類型
3.8 產品記號
3.9 質量值
3.10 語言標簽
3.11 實體標簽
3.12 范圍單位
4 HTTP消息
4.1 消息類型
4.2 消息報頭
4.3 消息主體
4.4 消息長度
4.5 通用報頭字段
5 請求
5.1 請求行(Request-Line)
5.2 請求所標識的資源
5.3 請求報頭字段
6 應答
6.1 狀態(tài)行
6.2 應答報頭字段
7 實體
7.1 實體報頭字段
7.2 實體主體
8 連接
8.1 持久連接
8.2 消息傳送需求
9 方法定義
9.1 安全和冪等的方法
9.2 OPTIONS
9.3 GET
9.4 HEAD
9.5 POST
9.6 PUT
9.7 DELETE
9.8 TRACE
9.9 CONNECT
10 狀態(tài)碼定義
10.1 用于報告的1xx
10.2 成功的2xx
10.3 重定向的3xx
10.4 客戶端錯誤的4xx
10.5 服務器錯誤的5xx
11 訪問認證
12 內容協(xié)商
12.1 服務器驅動協(xié)商
12.2 代理驅動協(xié)商
12.3 透明協(xié)商
13 HTTP中的緩存
13.1 HTTP中緩存的基本設計理念
13.2 過期模型
13.3 驗證模型
13.4 應答緩存能力
13.5 從緩存構造應答
13.6 緩存協(xié)商的應答
13.7 共享和非共享緩存
13.8 錯誤和不完全應答緩存行為
13.9 GET和HEAD的副作用
13.10 刷新或刪除后的無效性
13.11 強制寫通過
13.12 緩存替換
13.13 歷史列表
14 報頭字段定義
14.1 Accept(接受)
14.2 Accept-Charset(接受字符集)
14.3 Accept-Encoding(接受編碼)
14.4 Accept-Language(接受語言)
14.5 Accept-Range(接受范圍)
14.6 Age(年齡)
14.7 Allow(允許)
14.8 Authorization(授權)
14.9 Cache-control(緩存控制)
14.10 Connection(連接)
14.11 Content-Encoding(內容編碼)
14.12 Content-Language(內容語言)
14.13 Content-Length(內容長度)
14.14 Content-Location(內容位置)
14.15 Content-MD5(內容的MD5值)
14.16 Content-Range(內容范圍)
14.17 Content-Type(內容類型)
14.18 Date(日期)
14.19 ETag(實體標簽)
14.20 Expect(期望)
14.21 Expire(過期)
14.22 From(來自于)
14.23 Host(主機)
14.24 If-Match(如果匹配)
14.25 If-Modified-Since(如果自從……被改變)
14.26 If-None-Match(如果沒有一個匹配)
14.27 If-Range(如果有范圍)
14.28 If-Unmodified-Since(如果自從……未修改)
14.29 Last-Modified(最后一次修改)
14.30 Location(位置)
14.31 Max-Forwards(最大化向前傳送)
14.32 Pragma(特殊指令)
14.33 Proxy-Authenticate(代理認證)
14.34 Proxy-Authorization(代理授權)
14.35 Range(范圍)
14.36 Referer(參考者)
14.37 Retry-After(稍后重試)
14.38 Server(服務器)
14.39 TE(傳送編碼)
14.40 Trailer(跟蹤器)
14.41 Transfer-Encoding(傳送編碼)
14.42 Upgrade(升級)
14.43 User-Agent(用戶代理)
14.44 Vary(驗證)
14.45 Via(路由)
14.46 Warning(警告)
14.47 WWW-Authenticate(WWW-認證)
15 安全考慮
15.1 個人信息
15.2 基于文件和路徑名稱的攻擊
15.3 DNS欺騙
15.4 Location報頭和欺騙
15.5 Content-Disposition問題
15.6 認證證書和空閑的客戶端
15.7 代理服務器和緩存
16 致謝
17 參考文獻
18 作者地址
19 附錄
19.1 互聯(lián)網媒體類型message/http和application/http
19.2 互聯(lián)網媒體類型multipart/byteranges
19.3 可容忍的應用程序
19.4 HTTP實體和RFC 2045實體之間的區(qū)別
19.5 附加特性
19.6 和以前版本的兼容
20 索引
21 全部版權聲明
致謝
索引