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 的列表或错误报告页面。
在服务器配置文件中,使用 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_RESP
http://server/location
)。HSE_REQ_SEND_URL
/location
)。在他们最近的文档中,Microsoft 似乎放弃了这两个 HSE_REQ_SEND_URL
函数之间的区别。Apache 继续将它们视为两个具有不同要求和行为的不同函数。
HSE_REQ_SEND_RESPONSE_HEADER
HSE_REQ_DONE_WITH_SESSION
HSE_REQ_MAP_URL_TO_PATH
HSE_APPEND_LOG_PARAMETER
CustomLog
指令中的 \"%{isapi-parameter}n\"
组件中ISAPIAppendLogToQuery
On
指令的 %q
日志组件中ISAPIAppendLogToErrors
On
指令的错误日志中第一个选项,%{isapi-parameter}n
组件,始终可用且优先。
HSE_REQ_IS_KEEP_CONN
HSE_REQ_SEND_RESPONSE_HEADER_EX
fKeepConn
标志被忽略。HSE_REQ_IS_CONNECTED
Apache 对任何不支持的 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 回调的异步支持。