<-
Apache > HTTP 服务器 > 文档 > 版本 2.4 > 模块

Apache 模块 mod_isapi

可用语言:  en  |  fr  |  ko 

描述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 的列表或错误报告页面。

Support Apache!

主题

指令

错误修复清单

另请参阅

top

用法

在服务器配置文件中,使用 AddHandler 指令将 ISAPI 文件与 isapi-handler 处理程序关联,并使用其文件扩展名将其映射到它们。要启用任何 .dll 文件作为 ISAPI 扩展进行处理,请编辑 httpd.conf 文件并添加以下行

AddHandler isapi-handler .dll
在旧版本的 Apache 服务器中,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 文件的目录设置。

查看 其他说明程序员日志 以获取有关 mod_isapi 提供的特定 ISAPI 支持的更多详细信息和说明。

top

其他说明

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 过滤器。对过滤器的支持可能会在以后添加,但目前没有计划添加支持。

top

程序员日志

如果您正在为 Apache 2.0 mod_isapi 模块编程,则必须将对 ServerSupportFunction 的调用限制为以下指令

HSE_REQ_SEND_URL_REDIRECT_RESP
将用户重定向到另一个位置。
这必须是一个完全限定的 URL(例如 http://server/location)。
HSE_REQ_SEND_URL
将用户重定向到另一个位置。
这不能是完全限定的 URL,您不允许传递协议或服务器名称(例如,只需 /location)。
此重定向由服务器处理,而不是浏览器。

警告

在他们最近的文档中,Microsoft 似乎放弃了这两个 HSE_REQ_SEND_URL 函数之间的区别。Apache 继续将它们视为两个具有不同要求和行为的不同函数。

HSE_REQ_SEND_RESPONSE_HEADER
如果响应主体紧随 headers 字符串参数中的空行(两个连续的换行符),Apache 将接受响应主体。此主体不能包含 NULL,因为 headers 参数以 NULL 结尾。
HSE_REQ_DONE_WITH_SESSION
Apache 将此视为无操作,因为会话将在 ISAPI 从处理中返回时完成。
HSE_REQ_MAP_URL_TO_PATH
Apache 将将虚拟名称转换为物理名称。
HSE_APPEND_LOG_PARAMETER
此记录的消息可能在以下任何日志中捕获

第一个选项,%{isapi-parameter}n 组件,始终可用且优先。

HSE_REQ_IS_KEEP_CONN
将返回协商的 Keep-Alive 状态。
HSE_REQ_SEND_RESPONSE_HEADER_EX
将按文档记录的行为执行,尽管 fKeepConn 标志被忽略。
HSE_REQ_IS_CONNECTED
如果请求已中止,将报告 false。

Apache 对任何不支持的 ServerSupportFunction 调用返回 FALSE,并将 GetLastError 值设置为 ERROR_INVALID_PARAMETER

ReadClient 检索超过初始缓冲区(由 ISAPIReadAheadBuffer 定义)的请求主体。根据 ISAPIReadAheadBuffer 设置(在调用 ISAPI 处理程序之前缓冲的字节数),较短的请求在调用扩展时会完整发送到扩展。如果请求更长,ISAPI 扩展必须使用 ReadClient 来检索剩余的请求主体。

WriteClient 受支持,但仅支持 HSE_IO_SYNC 标志或无选项标志(值为 0)。任何其他 WriteClient 请求都将被拒绝,返回值为 FALSEGetLastError 值为 ERROR_INVALID_PARAMETER

GetServerVariable 受支持,尽管扩展服务器变量不存在(如其他服务器定义的那样)。所有常见的 Apache CGI 环境变量都可从 GetServerVariable 获取,以及 ALL_HTTPALL_RAW 值。

从 httpd 2.0 开始,mod_isapi 支持 ISAPI 规范的更高版本中引入的附加功能,以及对异步 I/O 和 TransmitFile 语义的有限模拟。Apache httpd 还支持预加载 ISAPI .dll 以提高性能。

top

ISAPIAppendLogToErrors 指令

描述将 ISAPI 扩展的 HSE_APPEND_LOG_PARAMETER 请求记录到错误日志
语法ISAPIAppendLogToErrors on|off
默认值ISAPIAppendLogToErrors off
上下文服务器配置、虚拟主机、目录、.htaccess
覆盖FileInfo
状态基础
模块mod_isapi

将 ISAPI 扩展的 HSE_APPEND_LOG_PARAMETER 请求记录到服务器错误日志。

top

ISAPIAppendLogToQuery 指令

描述将 ISAPI 扩展的 HSE_APPEND_LOG_PARAMETER 请求记录到查询字段
语法ISAPIAppendLogToQuery on|off
默认值ISAPIAppendLogToQuery on
上下文服务器配置、虚拟主机、目录、.htaccess
覆盖FileInfo
状态基础
模块mod_isapi

将 ISAPI 扩展的 HSE_APPEND_LOG_PARAMETER 请求记录到查询字段(附加到 CustomLog %q 组件)。

top

ISAPICacheFile 指令

描述在启动时加载的 ISAPI .dll 文件
语法ISAPICacheFile 文件路径 [文件路径] ...
上下文服务器配置、虚拟主机
状态基础
模块mod_isapi

指定在 Apache 服务器启动时加载的文件名列表(以空格分隔),并保持加载状态,直到服务器关闭。此指令可以为每个所需的 ISAPI .dll 文件重复。应指定每个文件的完整路径名。如果路径名不是绝对路径,则将相对于 ServerRoot 进行处理。

top

ISAPIFakeAsync 指令

描述为 ISAPI 回调模拟异步支持
语法ISAPIFakeAsync on|off
默认值ISAPIFakeAsync off
上下文服务器配置、虚拟主机、目录、.htaccess
覆盖FileInfo
状态基础
模块mod_isapi

在设置为 on 时,将模拟对 ISAPI 回调的异步支持。

top

ISAPILogNotSupported 指令

描述记录 ISAPI 扩展发出的不支持的功能请求
语法ISAPILogNotSupported on|off
默认值ISAPILogNotSupported off
上下文服务器配置、虚拟主机、目录、.htaccess
覆盖FileInfo
状态基础
模块mod_isapi

在服务器错误日志中记录 ISAPI 扩展发出的所有不支持的功能请求。这可能有助于管理员追踪问题。一旦设置为 on 并且所有所需的 ISAPI 模块都正常运行,就应该将其设置回 off。

top

ISAPIReadAheadBuffer 指令

描述发送到 ISAPI 扩展的预读缓冲区的大小
语法ISAPIReadAheadBuffer 大小
默认值ISAPIReadAheadBuffer 49152
上下文服务器配置、虚拟主机、目录、.htaccess
覆盖FileInfo
状态基础
模块mod_isapi

定义在最初调用 ISAPI 扩展时发送到 ISAPI 扩展的预读缓冲区的最大大小。所有剩余的数据必须使用 ReadClient 回调检索;一些 ISAPI 扩展可能不支持 ReadClient 函数。请将问题咨询 ISAPI 扩展的作者。

可用语言:  en  |  fr  |  ko 

top

评论

注意
这不是问答部分。此处放置的评论应指向有关改进文档或服务器的建议,如果它们被实施或被认为无效/与主题无关,则可能被我们的版主删除。有关如何管理 Apache HTTP 服务器的问题应发送到我们的 IRC 频道 #httpd(在 Libera.chat 上),或发送到我们的 邮件列表