致谢 1
引言 1
第一章 HTTP 1
1.1 背景 1
译者序 1
1.1.1 HTTP0.9 3
1.1.2 HTTP1.0 3
1.1.3 HTTP1.1 4
1.1.4 HTTPng 5
1.2 URL及其有关形式 5
1.2.2 HTTP URL 6
1.2.1 URL 6
1.2.3 绝对URL和路径 7
1.2.4 相对URL 8
1.2.5 URL编码 8
1.3 基本协议 8
1.3.1 HTTP:一个无态、应用层协议 9
1.3.2 TCP作为传输协议 10
1.3.3HTTP:一个媒体无关、面向对象协议 10
1.4 请求周期 10
1.6 消息 12
1.5 注意 12
1.6.1 消息标题 13
1.6.2 普通标题 13
1.7 请求 14
1.7.1 请求标题 15
1.7.2 GET请求的例子 16
1.8 响应 17
1.8.1 状态码 17
1.8.2 响应标题 18
1.8.3 实体标题 19
1.8.4 GET响应的例子 22
1.9 请求方法 23
1.9.1 GET 23
1.9.2 HEAD 24
1.9.3 POST 24
1.9.4 PUT 27
1.10 媒体类型 27
1.10.1 通用媒体类型 27
1.10.2 浏览器对媒体类型的解释 29
1.10.3 浏览器plug-ins处理媒体类型 30
1.11 HTTP与MIME的关系 30
1.11.1 访问认证 31
1.11.2 基本认证方法 32
1.11.3 BASE64编码 34
1.11.4 摘要认证(Digest Authentication) 36
1.12 小结 36
第二章 Web Server 技术 38
2.1 典型Web Server结构 40
2.1.1 Server操作 41
2.1.2 Web Server的实现 42
2.2 通用网关接口(CGI) 43
2.2.1 CGI环境变量 44
2.2.2 CGI URL 45
2.2.3 CGI的输入 46
2.2.4 CGI的输出 47
2.3 进程内(In-Process)扩充 47
2.4 CGI和进程内扩充的比较 48
2.5 Fast CGI 49
2.6 Netscape Plug-in 50
2.7 Microsoft ISAPI过滤器和ISA扩充 51
2.7.1 ISA扩充 51
2.7.2 ISAPI过滤器 52
2.8 小结 53
第三章 Netscape Server API 54
3.1 Netscape Server结构 54
3.1.1 UNIX 54
3.1.2 Windows NT 56
3.1.3 请求是如何处理的 58
3.1.4 请求处理顺序 58
3.2 配置文件 60
3.2.1 Server配置文件:magnus.conf 60
3.2.2 对象配置文件:obj.conf 62
3.2.3 mime.types文件 66
3.3 小结 67
第四章 NSAPI扩充函数基础 68
4.1 NSAPI包含的文件 68
4.2 NSAPI的存储管理 68
4.2.1 分配临时空间 69
4.2.2 分配永久存储空间 70
4.3 Pblock结构 70
4.3.1 pblock_find 71
4.3.2 pblock_findval 71
4.3.3 pblock_pblockzstr 72
4.3.4 pblock_nvinsert/pblock_nninsert 72
4.4 Session结构 73
4.3.5 pblock_remove 73
4.4.1 netbuf结构 75
4.4.2 netbuf函数 75
4.4.3 文件描述符和文件缓冲区 76
4.4.4 文件描述符和文件操作函数 76
4.4.5 文件缓冲区及其操作 79
4.5 Request结构 81
4.5.1 Request.vars的含义 82
4.5.3 Request.headers含义 83
4.5.2 Request.reqpb的含义 83
4.5.4 Request.srvhdrs含义 84
4.5.5 Request其他成员 85
4.6 小结 85
第五章 Server扩充 86
5.1 设计和实现 86
5.1.1 性能 86
5.1.2 存储器的使用 87
5.1.3 全局资源 88
5.2 线程及其安全性 88
5.2.1 线程 88
5.2.2 线程安全性 89
5.3 线程安全技术 90
5.4 NSAPI提供的锁机制 91
5.5 ISAPI的锁 92
5.6 优化线程安全性的注意事项 93
5.7 勿需考虑的方面 93
5.8 开发共享对象 93
5.9 调试Server扩充 94
5.10 小结 95
6.1.3 包含文件 96
6.1.5 重要的Request结构成员 96
6.1.4 重要的Session结构成员 96
6.1.1 表示形式 96
6.1.2 含义 96
6.1 初始化函数 96
第六章 设计NSAPI扩充函数 96
6.1.6 定义pblock变量 97
6.1.7 初始化扩充的返回码 97
6.1.8 初始化函数的配置 97
6.1.9 初始化函数的例子 98
6.1.10 关键特征 101
6.2.1 表示形式 102
6.2.2 含义 102
6.2 认证函数 102
6.2.3 包含文件 103
6.2.4 重要的Session结构成员 103
6.2.5 重要的Request结构成员 103
6.2.6 定义pblock变量 104
6.2.7 认证扩充的返回码 104
6.2.8 认证事件的配置 104
6.2.9 普通认证函数 105
6.3 完整的认证函数 109
6.3.1 关键特征 116
6.4 名字转换函数 119
6.4.1 形式描述 119
6.4.2 含义 120
6.4.3 包含文件 120
6.4.4 重要的Session结构成员 120
6.4.5 重要的Request结构成员 120
6.4.6 定义的pblock变量 120
6.4.7 名字转换扩充返回码 121
6.4.8 名字转换事件的配置 121
6.4.9 简单的名字转换函数 122
6.5 路径检查函数 126
6.4.10 关键特征 126
6.5.1 形式描述 127
6.5.2 含义 127
6.5.3 包含文件 127
6.5.4 重要的Session结构成员 127
6.5.5 重要的Request结构成员 127
6.5.6 定义pblock变量 128
6.5.7 路径检查扩充的返回码 128
6.5.8 路径检查事件的配置 128
6.5.9 简单的路径检查函数 129
6.6.1 形式表示 133
6.6.2 含义 133
6.6 对象类型函数 133
6.5.10 关键特征 133
6.6.3 包含文件 134
6.6.4 重要的Session结构成员 134
6.6.5 重要的Request结构成员 134
6.6.6 定义pblock变量 135
6.6.7 对象类扩充返回码 135
6.6.8 对象类型事件配置 135
6.6.9 一个简单的对象类型函数 136
6.6.10 关键特征 137
6.7.2 含义 138
6.7 Service类函数 138
6.7.1 描述形式 138
6.7.3 包含文件 139
6.7.4 重要的Session结构成员 140
6.7.5 重要的Request结构成员 140
6.7.6 定义pblock变量 141
6.7.7 服务扩充返回码 141
6.7.8 服务事件的配置 141
6.7.9 一个非交互式服务扩充 142
6.7.10 一个数据库驱动的服务扩充 146
6.8 增加记录的函数 165
6.7.11 关键特征 165
6.8.1 表示形式 166
6.8.2 含义 166
6.8.3 包含文件 166
6.8.4 重要的Session结构成员 166
6.8.5 重要的Request结构成员 166
6.8.6 pblock变量的定义 166
6.8.7 增加记录扩充返回码 166
6.8.8 本事件的配置 167
6.8.9 AddLog函数例子 168
6.9 小结 170
6.8.10 关键特征 170
7.1 Windows NT服务 171
7.2 IIS结构 171
第七章 Microsoft IIS和ISAPI 171
7.2.1 IIS配置 173
7.2.2 IIS认证 174
7.3 ISA 175
7.3.1 ISA是如何工作的? 175
7.3.2 如何集成ISA和IIS 176
7.3.3 ISA是CGI的一种替代方法 177
7.5 ISAPI过滤器 179
7.5.1 过滤器是如何工作的? 179
7.4 ISA的配置 179
7.4.2 注册访问 179
7.4.1 注册目录 179
7.5.2 请求处理顺序 180
7.5.3 和IIS通信 181
7.6 过滤器的配置 182
7.6.1 访问权限 182
7.7 小结 182
8.1.1 GetExtensionVersion 184
第八章 ISA应用基础 184
8.1 ISA的DLL入口点 184
8.1.2 HttpExtensionProc 185
8.1.3 TerminateExtension 187
8.2 ECB是什么 188
8.2.1 Get Server Variable 188
8.2.2 Read Client 192
8.2.3 WriteClient 193
8.2.4 ServerSupportFunction 195
8.3 小结 198
9.2 决定过滤器的优先级 199
9.1 请求事件通知 199
第九章 ISAPI过滤器基础 199
9.3 ISAPI过滤器的DLL入口点 200
9.3.1 GetFilterVersion 200
9.3.2 HttpFilterProc 203
9.3.3 GetServerVariable 207
9.3.4 AddResponseHeaders 208
9.3.5 WriteClient 209
9.3.6 ServerSupportFunction 211
9.3.7 AllocMem 213
9.4.1 安全端口——SF_NOTIFY_SECURE_PORT 215
9.4 事件 215
9.4.2 非安全端口——SF_NOTIFY_NONSECURE_PORT 216
9.4.3 事件——访问拒绝 216
9.4.4 读原始数据——SF_NOTIFY_READ_RAW_DATA 219
9.4.5 预处理标题——SF_NOTIFY_PREPROC_HEADERS 221
9.4.6 认证——SF_NOTIFY_AUTHENTICATION 224
9.4.7 URL映射——SF_NOTIFY_URL_MAP 226
9.4.8 发送原始数据——SF_NOTIFY_SEND_RAW_DATA 228
9.4.9 记录——SF_NOTIFY_LOG 230
9.4.10 结束会话——SF_NOTIFY_END_OF_NET_SESSION 232
9.5 小结 233
第十章 建立和开发ISA和ISAPI过滤器 234
10.1 建立和开发一个ISA 234
10.1.1 创建一个ISA——跟我学 234
10.1.2 关键点 240
10.1.3 CGI转换的有用注意事项 241
10.1.4 查询服务器变量 242
10.1.5 URL重定向 246
10.1.6 用GET或POST处理注册表 249
10.1.7 维护一个用户认证数据库 258
10.2.1 创建一个过滤器——跟我学 267
10.2 创建并设计一个过滤器 267
10.2.2 要点 277
10.2.3 记录过滤器 278
10.2.4 认证过滤器 284
10.2.5 对象连接器过滤器 292
10.2.6 过滤器的一般错误 321
10.3 更轻松、更安全的开发注意事项 321
10.3.1 在服务器机器上开发 321
10.3.2 使用调试版内存分配器 321
10.3.5 保证ISA或过滤器线程安全 322
10.3.3 用单独堆分配内存 322
10.3.4 检查返回码 322
10.4 ISA和过滤器调试技术 323
10.4.1 禁止缓冲服务器扩充 324
10.4.2 显示DLL的输出 324
10.4.3 交互运行IIS 325
10.4.4 IIS运行时附接调试器 325
10.5 小结 326
11.1 OO基本概念 327
11.1.1 抽象 327
第十一章 面向对象概述 327
11.1.2 封装 328
11.1.3 层次 329
11.1.4 多态性 330
11.1.5 类型 331
11.1.6 类与对象间的关系 331
11.2 OOA、OOD和OOP 331
11.3 面向对象框架 332
11.3.5 纵向和横向框架 333
11.3.4 黑匣子框架 333
11.3.3 白匣子框架 333
11.3.2 什么是框架 333
11.3.1 类库 333
11.3.6 应用和系统框架 334
11.3.7 使用面向对象的优点 334
11.4 小结 335
第十二章 Web Server扩充框架 336
12.1 Server框架的用途 336
12.1.1 可移植性 336
12.1.2 通用代码基础 336
12.1.4 简化扩充创建 337
12.2 ISAPI与NSAPI基本比较 337
12.1.3 单独模型 337
12.3 SEREF 339
12.3.1 OOPL的选择 339
12.3.2 SEREF基本结构 340
12.3.3 支持类 341
12.3.4 相关性方法 355
12.3.5 SEREF事件管理器 359
12.4 可移植性 369
12.4.1 提供系统服务 370
12.5 小结 375
第十三章 SEREF事件模型 377
13.1 事件层次 377
13.1.1 SEREFEvent类 377
13.2 HTTP认证事件 381
13.2.1 普通的相关性转换方法 382
13.2.2 增加一个认证事件句柄 383
13.2.3 封装的基本行为 384
13.2.4 实现例子 386
13.3 API门和独立性 388
13.3.1 SEREFUser类 389
13.4.1 普通的相关性转换方法 392
13.4 URL映射事件 392
13.4.2 增加URL映射事件句柄 395
13.4.3 封装的基本行为 396
13.4.4 实现例子 396
13.5 URL访问检测事件 398
13.5.1 普通的相关性转换方法 399
13.5.2 添加访问检测事件 399
13.5.3 封装的基本行为 400
13.5.4 实现例子 400
13.6 服务事件 401
13.6.1 普通相关性转换方法 401
13.6.3 封装的基本行为 407
13.6.2 增加服务事件句柄 407
13.6.4 实现例子 408
13.7 小结 413
第十四章 API-框架间的连接 414
14.1 目标 414
14.2 基本API的连接性 414
14.3 回顾事件句柄注册 415
14.4 特定的API代码 416
14.4.1 Netscape NSAPI 416
14.4.2 Microsoft ISAPI 420
14.5 小结 426