mod_isapi
描述: | Apache 中的 ISAPI Extensions 用于 Windows |
状态: | Base |
模块标识符: | isapi_module |
源文件: | mod_isapi.c |
兼容性: | 仅限 Win32 |
摘要
此模块实现 Internet Server 扩展 API。它允许 Apache 为 Windows 提供 Internet 服务器 extensions(e.g. ISAPI .dll 模块),但需遵守上述限制。
ISAPI 扩展模块(.dll files)由第三方编写。 Apache Group 不会创建这些模块,因此我们不提供对它们的支持。如果您在运行 ISAPI 扩展程序时遇到问题,请直接联系 ISAPI 的作者。请不要将此类问题发布到 Apache 的 lists 或错误报告页面.
用法
在 server configuration 文件中,使用AddHandler指令将 ISAPI files 与isapi-handler
处理程序关联,并使用其文件 extensions 将其映射到它们。要使任何.dll 文件作为 ISAPI 扩展名处理,请编辑 httpd.conf 文件并添加以下 line:
AddHandler isapi-handler .dll
在旧版本的 Apache 服务器中,isapi-isa
是正确的处理程序 name,而不是isapi-handler
。从 Apache 服务器的 2.3 开发版本开始,isapi-isa
不再有效。您需要更改 configuration 以使用isapi-handler
。
Apache 服务器中没有能力保留加载的请求模块。但是,您可以在 httpd.conf 中使用以下语法预加载并保留特定模块:
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
无论您是否预加载了 ISAPI 扩展,所有 ISAPI extensions 都受与 CGI 脚本相同的权限和限制的约束。也就是说,必须为包含 ISAPI .dll 文件的目录设置选项ExecCGI
。
查看补充说明和程序员杂志以获取更多详细信息,并澄清mod_isapi提供的特定 ISAPI 支持。
附加说明
Apache 的 ISAPI implementation 符合所有 ISAPI 2.0 规范,除了一些处理异步 I/O 的“Microsoft-specific”extensions。 Apache 的 I/O model 不允许以 ISAPI 可以访问的方式进行异步读写。如果 ISA 尝试访问不受支持的 features,包括 async I/O,则会在错误 log 中放置一条消息以帮助调试。由于这些消息可能成为洪水,因此存在指令ISAPILogNotSupported Off
以平息此噪声。
某些服务器(如 Microsoft IIS)将 ISAPI 扩展加载到服务器中并保持加载直到 memory 使用率过高,或者除非指定了 configuration 选项。 Apache 当前每次请求时都会加载和卸载 ISAPI 扩展,除非指定了ISAPICacheFile指令。这是低效的,但 Apache 的 memory model 使这成为最有效的方法。许多 ISAPI 模块与 Apache 服务器巧妙地不兼容,卸载这些模块有助于确保服务器的稳定性。
另外,请记住,虽然 Apache 支持 ISAPI Extensions,但不支持 ISAPI 过滤器。可以在稍后的 date 添加对过滤器的支持,但是此 time 不计划支持。
程序员杂志
如果您正在编写 Apache 2.0 mod_isapi模块,则必须将 calls 限制为ServerSupportFunction
以下指令:
HSE_REQ_SEND_URL_REDIRECT_RESP
将用户重定向到另一个位置。这必须是完全限定的 URL(e.g. http://server/location)。HSE_REQ_SEND_URL
将用户重定向到另一个位置。这不能是完全限定的 URL,不允许传递协议或服务器 name(e.g.只需/location)。此重定向由服务器处理,而不是由浏览器处理。警告在最近的文档中,Microsoft 似乎放弃了两个 HSE_REQ_SEND_URL 功能之间的区别。 Apache 继续将它们视为具有不同要求和行为的两个不同功能。HSE_REQ_SEND_RESPONSE_HEADER
如果 Apache 在 headers string 参数中跟随空 line(两个连续的换行符),则接受标题后面的响应主体。此主体不能包含 NULL,因为 headers 参数是 NULL 终止的。HSE_REQ_DONE_WITH_SESSION
Apache 认为这是 no-op,因为 session 将在 ISAPI 从处理返回时完成。HSE_REQ_MAP_URL_TO_PATH
Apache 会将虚拟 name 转换为物理 name。HSE_APPEND_LOG_PARAMETER
可以在以下任何日志中捕获此记录的消息:在%q log component 中的 CustomLog 指令中的\“%{。45}n \”component 中,在带有 ISAPIAppendLogToErrors On 指令的错误 log 中使用 ISAPIAppendLogToQuery On 指令第一个选项,%{。 46}n component,始终可用且首选。HSE_REQ_IS_KEEP_CONN
将_return 谈判 Keep-Alive 状态。HSE_REQ_SEND_RESPONSE_HEADER_EX
尽管 fKeepConn flag 被忽略,但行为与记录一致。HSE_REQ_IS_CONNECTED
如果请求已中止,将报告 false。
Apache 将FALSE
返回给ServerSupportFunction
的任何不受支持的调用,并将GetLastError
value _set 设置为ERROR_INVALID_PARAMETER
。
ReadClient
检索超过初始缓冲区的请求主体(由ISAPIReadAheadBuffer定义)。基于ISAPIReadAheadBuffer
设置(在调用 ISAPI 处理程序之前缓冲的字节数),在调用时,较短的请求将完整地发送到扩展。如果请求更长,则 ISAPI 扩展必须使用ReadClient
来检索剩余的请求正文。
支持WriteClient
,但仅支持HSE_IO_SYNC
flag 或没有选项 flag(0
的值)。任何其他WriteClient
请求将被拒绝
支持GetServerVariable
,但扩展服务器变量不存在(由其他 servers.)定义所有常见的 Apache CGI 环境变量可从GetServerVariable
获得,以及ALL_HTTP
和ALL_RAW
值。
由于 httpd 2.0,mod_isapi支持在 ISAPI 规范的更高版本中引入的其他 features,以及 async I/O 和TransmitFile
语义的有限仿真。 Apache httpd 还支持为 performance 预加载 ISAPI .dlls。
ISAPIAppendLogToErrors 指令
描述: | Record HSE_APPEND_LOG_PARAMETER 从 ISAPI extensions 请求错误 log |
句法: | ISAPIAppendLogToErrors on\|off |
默认: | ISAPIAppendLogToErrors off |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_isapi |
Record HSE_APPEND_LOG_PARAMETER
从 ISAPI extensions 请求到服务器错误 log。
ISAPIAppendLogToQuery 指令
描述: | Record HSE_APPEND_LOG_PARAMETER 从 ISAPI extensions 到查询字段的请求 |
句法: | ISAPIAppendLogToQuery on\|off |
默认: | ISAPIAppendLogToQuery on |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_isapi |
Record HSE_APPEND_LOG_PARAMETER
从 ISAPI extensions 到查询字段的请求(附加到CustomLog%q
component)。
ISAPICacheFile 指令
描述: | ISAPI .dll files 在启动时加载 |
句法: | ISAPICacheFile file-path[file-path]... |
Context: | server config,virtual host |
状态: | Base |
模块: | mod_isapi |
指定 Apache 服务器启动时要加载的 space-separated 文件名列表,并在服务器关闭之前保持加载状态。可以对所需的每个 ISAPI .dll 文件重复此指令。应指定每个文件的完整路径 name。如果路径 name 不是绝对路径,则将相对于ServerRoot进行处理。
ISAPIFakeAsync 指令
描述: | 对 ISAPI 回调的伪异步支持 |
句法: | ISAPIFakeAsync on\|off |
默认: | ISAPIFakeAsync off |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_isapi |
设置为 on 时,将模拟对 ISAPI 回调的异步支持。
ISAPILogNotSupported 指令
描述: | 从 ISAPI extensions 中记录不受支持的 feature 请求 |
句法: | ISAPILogNotSupported on\|off |
默认: | ISAPILogNotSupported off |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_isapi |
在服务器错误 log 中记录来自 ISAPI extensions 的所有不受支持的 features 请求。这可以帮助管理员追踪问题。一旦设置为 on 并且所有所需的 ISAPI 模块都正常运行,它应该重新设置为关闭。
ISAPIReadAheadBuffer 指令
描述: | 发送到 ISAPI extensions 的 Read Ahead Buffer 的大小 |
句法: | ISAPIReadAheadBuffer size |
默认: | ISAPIReadAheadBuffer 49152 |
Context: | server config,virtual host,directory,.htaccess |
覆盖: | FileInfo |
状态: | Base |
模块: | mod_isapi |
定义最初调用时发送到 ISAPI extensions 的 Read Ahead Buffer 的最大大小。必须使用ReadClient
回调检索所有剩余数据;某些 ISAPI extensions 可能不支持ReadClient
function。将问题提交给 ISAPI 扩展的作者。