Apache HTTP 服务器版本 2.4

| 描述 | Apache for Windows 中的 ISAPI 扩展 |
|---|---|
| 状态 | 基础 |
| 模块标识符 | isapi_module |
| 源文件 | mod_isapi.c |
| 兼容性 | 仅限 Win32 |
此模块实现了 Internet Server 扩展 API。它允许 Internet Server 扩展(例如 ISAPI .dll 模块)由 Apache for Windows 提供服务,但受限于所述限制。
ISAPI 扩展模块(.dll 文件)由第三方编写。Apache Group 不编写这些模块,因此我们不提供对它们的任何支持。如果您在运行其 ISAPI 扩展时遇到问题,请联系 ISAPI 的作者。请不要将此类问题发布到 Apache 的列表或错误报告页面。

ISAPIAppendLogToErrors
ISAPIAppendLogToQuery
ISAPICacheFile
ISAPIFakeAsync
ISAPILogNotSupported
ISAPIReadAheadBuffer在服务器配置文件中,使用 AddHandler 指令将 ISAPI 文件与 isapi-handler 处理程序关联,并使用其文件扩展名将其映射到它们。要启用任何 .dll 文件作为 ISAPI 扩展进行处理,请编辑 httpd.conf 文件并添加以下行
AddHandler isapi-handler .dll
isapi-isa 是正确的处理程序名称,而不是 isapi-handler。从 Apache 服务器的 2.3 开发版本开始,isapi-isa 不再有效。您需要更改配置以使用 isapi-handler 代替。Apache 服务器中没有保留请求的模块加载的功能。但是,您可以通过在 httpd.conf 中使用以下语法来预加载并保持特定模块的加载状态
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
无论您是否预加载了 ISAPI 扩展,所有 ISAPI 扩展都受与 CGI 脚本相同的权限和限制的约束。也就是说,Options ExecCGI 必须为包含 ISAPI .dll 文件的目录设置。
Apache 的 ISAPI 实现符合所有 ISAPI 2.0 规范,除了处理异步 I/O 的一些“Microsoft 特定”扩展。Apache 的 I/O 模型不允许以 ISAPI 可以访问的方式进行异步读写。如果 ISA 尝试访问不支持的功能,包括异步 I/O,则会在错误日志中放置一条消息以帮助调试。由于这些消息可能会泛滥,因此存在指令 ISAPILogNotSupported Off 来消除这种噪音。
一些服务器,如 Microsoft IIS,将 ISAPI 扩展加载到服务器中并保持加载状态,直到内存使用量过高,或者除非指定配置选项。Apache 目前在每次请求时加载和卸载 ISAPI 扩展,除非指定了 ISAPICacheFile 指令。这效率低下,但 Apache 的内存模型使这成为最有效的方法。许多 ISAPI 模块与 Apache 服务器略有不兼容,卸载这些模块有助于确保服务器的稳定性。
此外,请记住,虽然 Apache 支持 ISAPI 扩展,但它不支持 ISAPI 过滤器。对过滤器的支持可能会在以后添加,但目前没有计划添加支持。
如果您正在为 Apache 2.0 mod_isapi 模块编程,则必须将对 ServerSupportFunction 的调用限制为以下指令
HSE_REQ_SEND_URL_REDIRECT_RESPhttp://server/location)。HSE_REQ_SEND_URL/location)。在他们最近的文档中,Microsoft 似乎放弃了这两个 HSE_REQ_SEND_URL 函数之间的区别。Apache 继续将它们视为两个具有不同要求和行为的不同函数。
HSE_REQ_SEND_RESPONSE_HEADERHSE_REQ_DONE_WITH_SESSIONHSE_REQ_MAP_URL_TO_PATHHSE_APPEND_LOG_PARAMETERCustomLog 指令中的 \"%{isapi-parameter}n\" 组件中ISAPIAppendLogToQuery On 指令的 %q 日志组件中ISAPIAppendLogToErrors On 指令的错误日志中第一个选项,%{isapi-parameter}n 组件,始终可用且优先。
HSE_REQ_IS_KEEP_CONNHSE_REQ_SEND_RESPONSE_HEADER_EXfKeepConn 标志被忽略。HSE_REQ_IS_CONNECTEDApache 对任何不支持的 ServerSupportFunction 调用返回 FALSE,并将 GetLastError 值设置为 ERROR_INVALID_PARAMETER。
ReadClient 检索超过初始缓冲区(由 ISAPIReadAheadBuffer 定义)的请求主体。根据 ISAPIReadAheadBuffer 设置(在调用 ISAPI 处理程序之前缓冲的字节数),较短的请求在调用扩展时会完整发送到扩展。如果请求更长,ISAPI 扩展必须使用 ReadClient 来检索剩余的请求主体。
WriteClient 受支持,但仅支持 HSE_IO_SYNC 标志或无选项标志(值为 0)。任何其他 WriteClient 请求都将被拒绝,返回值为 FALSE,GetLastError 值为 ERROR_INVALID_PARAMETER。
GetServerVariable 受支持,尽管扩展服务器变量不存在(如其他服务器定义的那样)。所有常见的 Apache CGI 环境变量都可从 GetServerVariable 获取,以及 ALL_HTTP 和 ALL_RAW 值。
从 httpd 2.0 开始,mod_isapi 支持 ISAPI 规范的更高版本中引入的附加功能,以及对异步 I/O 和 TransmitFile 语义的有限模拟。Apache httpd 还支持预加载 ISAPI .dll 以提高性能。
| 描述 | 将 ISAPI 扩展的 HSE_APPEND_LOG_PARAMETER 请求记录到错误日志 |
|---|---|
| 语法 | ISAPIAppendLogToErrors on|off |
| 默认值 | ISAPIAppendLogToErrors off |
| 上下文 | 服务器配置、虚拟主机、目录、.htaccess |
| 覆盖 | FileInfo |
| 状态 | 基础 |
| 模块 | mod_isapi |
将 ISAPI 扩展的 HSE_APPEND_LOG_PARAMETER 请求记录到服务器错误日志。
| 描述 | 将 ISAPI 扩展的 HSE_APPEND_LOG_PARAMETER 请求记录到查询字段 |
|---|---|
| 语法 | ISAPIAppendLogToQuery on|off |
| 默认值 | ISAPIAppendLogToQuery on |
| 上下文 | 服务器配置、虚拟主机、目录、.htaccess |
| 覆盖 | FileInfo |
| 状态 | 基础 |
| 模块 | mod_isapi |
将 ISAPI 扩展的 HSE_APPEND_LOG_PARAMETER 请求记录到查询字段(附加到 CustomLog %q 组件)。
| 描述 | 在启动时加载的 ISAPI .dll 文件 |
|---|---|
| 语法 | ISAPICacheFile 文件路径 [文件路径] ... |
| 上下文 | 服务器配置、虚拟主机 |
| 状态 | 基础 |
| 模块 | mod_isapi |
指定在 Apache 服务器启动时加载的文件名列表(以空格分隔),并保持加载状态,直到服务器关闭。此指令可以为每个所需的 ISAPI .dll 文件重复。应指定每个文件的完整路径名。如果路径名不是绝对路径,则将相对于 ServerRoot 进行处理。
| 描述 | 为 ISAPI 回调模拟异步支持 |
|---|---|
| 语法 | ISAPIFakeAsync on|off |
| 默认值 | ISAPIFakeAsync off |
| 上下文 | 服务器配置、虚拟主机、目录、.htaccess |
| 覆盖 | FileInfo |
| 状态 | 基础 |
| 模块 | mod_isapi |
在设置为 on 时,将模拟对 ISAPI 回调的异步支持。