Apache模块 mod_isapi
说明 | 仅限于在Windows平台上实现ISAPI扩展 |
---|---|
状态 | 基本(B) |
模块名 | isapi_module |
源文件 | mod_isapi.c |
兼容性 | 仅用于Win32 |
概述
本模块实现了互联网服务扩展应用程序编程接口(Internet Server extension API)。本模块使得Windows上的Apache能有限地实现互联网服务扩展(比如调用ISAPI的动态连接库)。
ISAPI扩展模块(.dll文件)是由第三方开发的。Apache开发组没有编写这些模块,因此我们也不对它们提供支持。如果在运行ISAPI扩展过程中发生问题,请直接与ISAPI的作者联系。请不要将此类问题贴在Apache的邮件列表或错误反馈页面上。
AddHandler指令将isapi-isa
处理器与ISAPI文件关联起来,并通过文件扩展名来建议对应关系。要将任何一个.dll文件作为ISAPI扩展来处理,需要编辑httpd.conf文件,并加入以下行:
AddHandler isapi-isa .dll
AddHandler isapi-isa .dll
Apache服务器不允许将服务于请求的模块动态地加载,但可以通过在httpd.conf文件中,加入以下语句使一个模块在Apache启动时预先载入系统,并使其驻留在系统中:
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
无论是否预载一个ISAPI扩展,所有的ISAPI扩展都使用与CGI脚本相同的许可限制来管理。也就是说,包含ISAPI动态连接库的目录必须要设置"Options
ExecCGI
"。
请参阅附加注释和程序员注记以得到关于mod_isapi
所提供的特定的ISAPI支持的细节内容。
ISAPICacheFile指令。虽然这样看来是效率很低的一种做法,但根据Apache的内存模式使用这种方式是最有效的。许多ISAPI模块与Apache服务器有细微的兼容性问题,卸载这些模块可以保证服务器的稳定运行。
同时请记住Apache支持ISAPI扩展,但它不支持ISAPI过滤器。对于ISAPI过滤器的支持可能会在晚些时候加入,但目前没有支持这一功能的计划。
程序员注记
如果你正在开发 Apache 2.0 mod_isapi
模块,你必须严格按照以下指令的限制来调用ServerSupportFunction
:
HSE_REQ_SEND_URL_REDIRECT_RESP
- 重定向用户到其它的位置。必须使用完整的、合法的URL(比如:
http://server/location
)。 HSE_REQ_SEND_URL
- 重定向用户到其它的位置。这里不能使用一个完整的URL,你不可以传入协议或服务器名(例如:
/location
)。这类重定向由服务器来处理,不是浏览器。警告
在最近发布的文档中,微软已经试图放弃这两个
HSE_REQ_SEND_URL
函数的差别。但Apache还是将它们视为两个不同的函数加以不同的实现。 HSE_REQ_SEND_RESPONSE_HEADER
- 如果在请求头字符串变量中,请求头的内容后面紧跟一个空行(两个连续的换行),然后再加上请求体的内容,Apache能接受这一相应的请求体。因为请求头变量是以NULL结束的,这个请求体里不能包含NULL。
HSE_REQ_DONE_WITH_SESSION
- Apache认为这是一个空操作,因为当ISAPI处理返回时,会话就结束了。
HSE_REQ_MAP_URL_TO_PATH
- Apache将虚拟名字转换为物理名字。
HSE_APPEND_LOG_PARAMETER
- 这一日志信息可以在以下任一地方捕获:
- 在
CustomLog
指令中的\"%{isapi-parameter}n\"
元素里 - 在"
ISAPIAppendLogToQuery
On
"指令中的"%q
"日志元素里 - 由"
ISAPIAppendLogToErrors
On
"指令所产生的错误日志中
第一行的
%{isapi-parameter}n
元素总是可用的,并且是推荐的。 - 在
HSE_REQ_IS_KEEP_CONN
- 返回Keep-Alive的协商状态。
HSE_REQ_SEND_RESPONSE_HEADER_EX
- 即使
fKeepConn
标志被忽略,还是按有证书的方式来处理。 HSE_REQ_IS_CONNECTED
- 如果请求退出则报告错误。
对于所有不支持的ServerSupportFunction
调用,Apache返回FALSE
,同时将GetLastError
的值置为ERROR_INVALID_PARAMETER
。
ReadClient
越过初始缓冲区(由ISAPIReadAheadBuffer
指令定义)得到请求的数据包。根据ISAPIReadAheadBuffer
(在调用ISAPI处理前缓冲的数据字节数)的设定,较小的请求包当请求被调用时,直接完全地传送到ISAPI扩展。如果请求包很长,ISAPI扩展必须使用ReadClient
得到剩下的请求数据。
支持WriteClient
,但只能使用HSE_IO_SYNC
标志或不带标志("0
"值)。任何其它的WriteClient
请求会被拒绝,并且返回FALSE
,同时GetLastError
的值被置为ERROR_INVALID_PARAMETER
。
支持GetServerVariable
,虽然扩展服务变量不存在(定义在其它服务器上)。包括ALL_HTTP
和ALL_RAW
,所有的常规Apache CGI环境变量都可以通过GetServerVariable
得到。
Apache 2.0 mod_isapi
支持后来版本的ISAPI规范中的新增功能,比如对异步I/O的有限仿真及TransmitFile
语义。Apache同时也支持ISAPI .dlls 的预载入以提高性能,以上这些在 Apache1.3 mod_isapi
都没有实现。
说明
把ISAPI扩展的HSE_APPEND_LOG_PARAMETER
请求记录在错误日志中
语法
ISAPIAppendLogToErrors on|off
默认值
ISAPIAppendLogToErrors off
作用域
server config, virtual host, directory, .htaccess
覆盖项
FileInfo
状态
基本(B)
模块
mod_isapi
HSE_APPEND_LOG_PARAMETER
请求记录在错误日志中ISAPIAppendLogToErrors on|off
ISAPIAppendLogToErrors off
把ISAPI扩展的HSE_APPEND_LOG_PARAMETER
请求记录在错误日志中
说明
把ISAPI扩展的HSE_APPEND_LOG_PARAMETER
请求记录在查询域中
语法
ISAPIAppendLogToQuery on|off
默认值
ISAPIAppendLogToQuery on
作用域
server config, virtual host, directory, .htaccess
覆盖项
FileInfo
状态
基本(B)
模块
mod_isapi
HSE_APPEND_LOG_PARAMETER
请求记录在查询域中ISAPIAppendLogToQuery on|off
ISAPIAppendLogToQuery on
把ISAPI扩展的HSE_APPEND_LOG_PARAMETER
请求记录在查询域中(追加在CustomLog
%q
元素后面)。
说明
启动时载入的ISAPI动态连接库
语法
ISAPICacheFile file-path [file-path] ...
作用域
server config, virtual host
状态
基本(B)
模块
mod_isapi
ISAPICacheFile file-path [file-path] ...
指定一个需在Apache服务启动的时候载入的以空格分隔的文件列表,这些文件驻留在系统中直至服务器关闭。本指令可以为每个需要的ISAPI动态连接库文件所重复。应指定每个文件的路径。如果不是绝对路径,则会基于ServerRoot
来处理相对路径。
说明
为ISAPI回调模拟异步支持
语法
ISAPIFakeAsync on|off
默认值
ISAPIFakeAsync off
作用域
server config, virtual host, directory, .htaccess
覆盖项
FileInfo
状态
基本(B)
模块
mod_isapi
ISAPIFakeAsync on|off
ISAPIFakeAsync off
当设为on时,模拟ISAPI回调的异步支持。