Apache 2.0手册中文版翻译项目 [本文译者: Daniel * ]

项目说明 | 项目进度 | 项目讨论区 | Apache手册中文版

 


mod_isapi - Apache HTTP服务器
<-
Apache主站 > HTTP服务器 > 文档 > 2.0版本 > 模块索引

Apache模块 mod_isapi

说明:Apache for Windows的ISAPI扩展
状态:Base
模块名:isapi_module
源文件:mod_isapi.c
兼容性:仅用于Win32

概要

本模块实现了互联网服务扩展应用程序接口(Internet Server extension API)。本模块使得Apache for Windows能有限地实现互联网服务扩展(比如:调用ISAPI的动态连接库)。

ISAPI扩展模块(.dll文件)是由第三方开发的。Apache组织没有编写这些模块,因此我们也不对它们提供技术支持。如果在运行ISAPI扩展过程中发生问题,请直接与ISAPI的作者联系。请不要将此类问题贴在Apache的邮件列表或错误反馈页面上。

指令索引

主题

top

用法

在服务器配置文件中,使用AddHandler指令将ispai-isa与ISAPI文件联系起来,并通过文件扩展名来建议对应关系。要将任何一个.dll文件作为ISAPI扩展来处理,编辑httpd.conf文件,并加入以下行:

AddHandler isapi-isa .dll

Apache服务器不允许将服务请求需要的模块动态地调入系统,但可以通过在你的httpd.conf文件中,加入以下语句使一个模块在Apache启动时预先载入系统,并使其驻留在系统中:

ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll

无论是否预载一个ISAPI扩展,所有的ISAPI扩展都使用与CGI脚本相同的许可限制来管理。也就是说,包含ISAPI动态连接库的目录必须要设置Options ExecCGI

参阅Additional NotesProgrammer's Journal得到关于mod_isapi所提供的特定的ISAPI支持的细节内容。

top

附加注释

Apache的ISAPI实现了除部分用来处理异步I/O的微软特定(Microsoft-specific)扩展外的所有ISAPI 2.0规范。Apache的I/O模型不允许使用ISAPI可能用到的异步读写方式。如果ISA试图调用不支持的功能,包括异步I/O,在错误日志中会显示一条错误信息以方便系统的调试。由于这类错误信息可能会大量地产生,指令ISAPILogNotSupported Off可以使这类错误的日志不被记录。

在某些服务器上,比如微软的IIS,ISAPI扩展在载入后将驻留在服务器上,直到内存占用过高,或是指定了不同的配置选项。Apache目前在每次请求时,都会上载和下载特定的ISAPI扩展,除非指定了ISAPICacheFile指令。虽然这样看来是效率很低的一种做法,但根据Apache的内存模式使用这种方式是最有效的。许多ISAPI模块与Apache服务器有细微的兼容性问题,卸载这些模块可以保证服务器的稳定运行。

同时请记住Apache支持ISAPI扩展,但它不支持ISAPI过滤器。对于ISAPI过滤器的支持可能会在晚些时候加入,但目前没有支持这一功能的计划。

top

程序员注记

如果你正在开发Apache 2.0 mod_isapi模块,你必须严格按照以下指令的限制来调用ServerSupportFunction:

HSE_REQ_SEND_URL_REDIRECT_RESP
重定向用户到其它的位置。
这里必须使用完整的、合法的URL(比如:http://server/location)。
HSE_REQ_SEND_URL
重定向用户到其它的位置。
这里不能使用一个完整的URL,你不可以传入协议或服务器名(例如:simply /location)。
这类重定向由服务器来处理,不是浏览器。

Warning

在最近发布的文档中,微软已经试图放弃这两个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
这一日志信息可以在以下任一地方捕获:

第一行的%{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_HTTPALL_RAW,所有的常规Apache CGI环境变量都可以通过GtServerVariable来得到。

Apache 2.0 mod_isapi 支持后来版本的ISAPI规范中的新增功能,比如对异步I/O的有限仿真及TransmitFile 语义。 Apache同时也支持ISAPI .dlls的预载入以提高性能,以上这些在Apache 1.3 mod_isapi都没有实现.

top

ISAPIAppendLogToErrors 指令

说明:把ISAPI扩展的HSE_APPEND_LOG_PARAMETER请求记录在错误日志中
语法:ISAPIAppendLogToErrors on|off
默认值:ISAPIAppendLogToErrors off
上下文:服务器配置, 虚拟主机, 目录, .htaccess
覆盖项:FileInfo
状态:Base
模块:mod_isapi

把ISAPI扩展的HSE_APPEND_LOG_PARAMETER请求记录在系统错误日志中。

top

ISAPIAppendLogToQuery 指令

说明:把ISAPI扩展的HSE_APPEND_LOG_PARAMETER请求记录在查询域中
语法:ISAPIAppendLogToQuery on|off
默认值:ISAPIAppendLogToQuery on
上下文:服务器配置, 虚拟主机, 目录, .htaccess
覆盖项:FileInfo
状态:Base
模块:mod_isapi

把ISAPI扩展的HSE_APPEND_LOG_PARAMETER请求记录在查询域中(追加在CustomLog %q元素后面)。

top

ISAPICacheFile 指令

说明:启动时载入的ISAPI动态连接库
语法:ISAPICacheFile file-path [file-path] ...
上下文:服务器配置, 虚拟主机
状态:Base
模块:mod_isapi

指定一个需在Apache服务启动的时候载入的以空格分隔的文件列表,这些文件驻留在系统中直至服务器关闭。本指令可以为每个需要的ISAPI动态连接库文件所重复。应指定每个文件的路径。如果不是绝对路径,则会基于ServerRoot来处理相对路径。

top

ISAPIFakeAsync 指令

说明:为ISAPI回调模拟异步支持
语法:ISAPIFakeAsync on|off
默认值:ISAPIFakeAsync off
上下文:服务器配置, 虚拟主机, 目录, .htaccess
覆盖项:FileInfo
状态:Base
模块:mod_isapi

当设为on时,模拟ISAPI回调的异步支持。

top

ISAPILogNotSupported 指令

说明:记录ISAPI不支持的功能调用
语法:ISAPILogNotSupported on|off
默认值:ISAPILogNotSupported off
上下文:服务器配置, 虚拟主机, 目录, .htaccess
覆盖项:FileInfo
状态:Base
模块:mod_isapi

在服务出错日志中记录所有的对于ISAPI扩展不支持的请求。本指令可以帮助系统管理员跟踪错误。把这个指令定义为on以后,如果所有的ISAPI模块都工作良好,应该把它设回为Off。

top

ISAPIReadAheadBuffer 指令

说明:传送到ISAPI扩展的预读缓冲区大小
语法:ISAPIReadAheadBuffer size
默认值:ISAPIReadAheadBuffer 49152
上下文:服务器配置, 虚拟主机, 目录, .htaccess
覆盖项:FileInfo
状态:Base
模块:mod_isapi

定义初始调用时传送到ISAPI扩展的最大预读缓冲区大小。所有其它的数据必须通过ReadClient回调功能得到;部分ISAPI扩展可能不支持ReadClient功能。请参考ISAPI扩展本身对相关问题描述。

 


项目维护者: kajaa [本文译者: Daniel * ]

项目说明 | 项目进度 | 项目讨论区 | Apache手册中文版