Apache HTTP Server 版本2.2
說(shuō)明 | 僅限于在Windows平臺(tái)上實(shí)現(xiàn)ISAPI擴(kuò)展 |
---|---|
狀態(tài) | 基本(B) |
模塊名 | isapi_module |
源文件 | mod_isapi.c |
兼容性 | 僅用于Win32 |
本模塊實(shí)現(xiàn)了互聯(lián)網(wǎng)服務(wù)擴(kuò)展應(yīng)用程序編程接口(Internet Server extension API)。本模塊使得Windows上的Apache能有限地實(shí)現(xiàn)互聯(lián)網(wǎng)服務(wù)擴(kuò)展(比如調(diào)用ISAPI的動(dòng)態(tài)連接庫(kù))。
ISAPI擴(kuò)展模塊(.dll文件)是由第三方開(kāi)發(fā)的。Apache開(kāi)發(fā)組沒(méi)有編寫(xiě)這些模塊,因此我們也不對(duì)它們提供支持。如果在運(yùn)行ISAPI擴(kuò)展過(guò)程中發(fā)生問(wèn)題,請(qǐng)直接與ISAPI的作者聯(lián)系。請(qǐng)不要將此類(lèi)問(wèn)題貼在Apache的郵件列表或錯(cuò)誤反饋?lái)?yè)面上。
在服務(wù)器配置文件中,使用AddHandler
指令將isapi-isa
處理器與ISAPI文件關(guān)聯(lián)起來(lái),并通過(guò)文件擴(kuò)展名來(lái)建議對(duì)應(yīng)關(guān)系。要將任何一個(gè).dll文件作為ISAPI擴(kuò)展來(lái)處理,需要編輯httpd.conf文件,并加入以下行:
AddHandler isapi-isa .dll
Apache服務(wù)器不允許將服務(wù)于請(qǐng)求的模塊動(dòng)態(tài)地加載,但可以通過(guò)在httpd.conf文件中,加入以下語(yǔ)句使一個(gè)模塊在Apache啟動(dòng)時(shí)預(yù)先載入系統(tǒng),并使其駐留在系統(tǒng)中:
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
無(wú)論是否預(yù)載一個(gè)ISAPI擴(kuò)展,所有的ISAPI擴(kuò)展都使用與CGI腳本相同的許可限制來(lái)管理。也就是說(shuō),包含ISAPI動(dòng)態(tài)連接庫(kù)的目錄必須要設(shè)置"Options
ExecCGI
"。
請(qǐng)參閱附加注釋和程序員注記以得到關(guān)于mod_isapi
所提供的特定的ISAPI支持的細(xì)節(jié)內(nèi)容。
Apache的ISAPI實(shí)現(xiàn)了除部分用來(lái)處理異步I/O的微軟特定(Microsoft-specific)擴(kuò)展以外的所有ISAPI 2.0規(guī)范。Apache的I/O模型不允許使用ISAPI可能用到的異步讀寫(xiě)方式。如果ISAPI試圖調(diào)用不支持的功能,包括異步I/O,在錯(cuò)誤日志中會(huì)顯示一條錯(cuò)誤信息以方便系統(tǒng)的調(diào)試。由于這類(lèi)錯(cuò)誤信息可能會(huì)大量地產(chǎn)生,指令"ISAPILogNotSupported Off
"可以使這類(lèi)錯(cuò)誤信息不被記錄。
在某些服務(wù)器上,比如微軟的IIS,ISAPI擴(kuò)展在載入后將駐留在服務(wù)器上,直到內(nèi)存占用過(guò)高,或是指定了不同的配置選項(xiàng)。Apache目前在每次請(qǐng)求時(shí),都會(huì)加載和卸載特定的ISAPI擴(kuò)展,除非指定了ISAPICacheFile
指令。雖然這樣看來(lái)是效率很低的一種做法,但根據(jù)Apache的內(nèi)存模式使用這種方式是最有效的。許多ISAPI模塊與Apache服務(wù)器有細(xì)微的兼容性問(wèn)題,卸載這些模塊可以保證服務(wù)器的穩(wěn)定運(yùn)行。
同時(shí)請(qǐng)記住Apache支持ISAPI擴(kuò)展,但它不支持ISAPI過(guò)濾器。對(duì)于ISAPI過(guò)濾器的支持可能會(huì)在晚些時(shí)候加入,但目前沒(méi)有支持這一功能的計(jì)劃。
如果你正在開(kāi)發(fā) Apache 2.0 mod_isapi
模塊,你必須嚴(yán)格按照以下指令的限制來(lái)調(diào)用ServerSupportFunction
:
HSE_REQ_SEND_URL_REDIRECT_RESP
http://server/location
)。HSE_REQ_SEND_URL
/location
)。這類(lèi)重定向由服務(wù)器來(lái)處理,不是瀏覽器。
在最近發(fā)布的文檔中,微軟已經(jīng)試圖放棄這兩個(gè)HSE_REQ_SEND_URL
函數(shù)的差別。但Apache還是將它們視為兩個(gè)不同的函數(shù)加以不同的實(shí)現(xiàn)。
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
"指令所產(chǎn)生的錯(cuò)誤日志中第一行的 %{isapi-parameter}n
元素總是可用的,并且是推薦的。
HSE_REQ_IS_KEEP_CONN
HSE_REQ_SEND_RESPONSE_HEADER_EX
fKeepConn
標(biāo)志被忽略,還是按有證書(shū)的方式來(lái)處理。HSE_REQ_IS_CONNECTED
對(duì)于所有不支持的ServerSupportFunction
調(diào)用,Apache返回FALSE
,同時(shí)將GetLastError
的值置為ERROR_INVALID_PARAMETER
。
ReadClient
越過(guò)初始緩沖區(qū)(由ISAPIReadAheadBuffer
指令定義)得到請(qǐng)求的數(shù)據(jù)包。根據(jù)ISAPIReadAheadBuffer
(在調(diào)用ISAPI處理前緩沖的數(shù)據(jù)字節(jié)數(shù))的設(shè)定,較小的請(qǐng)求包當(dāng)請(qǐng)求被調(diào)用時(shí),直接完全地傳送到ISAPI擴(kuò)展。如果請(qǐng)求包很長(zhǎng),ISAPI擴(kuò)展必須使用ReadClient
得到剩下的請(qǐng)求數(shù)據(jù)。
支持WriteClient
,但只能使用HSE_IO_SYNC
標(biāo)志或不帶標(biāo)志("0
"值)。任何其它的WriteClient
請(qǐng)求會(huì)被拒絕,并且返回FALSE
,同時(shí)GetLastError
的值被置為ERROR_INVALID_PARAMETER
。
支持GetServerVariable
,雖然擴(kuò)展服務(wù)變量不存在(定義在其它服務(wù)器上)。包括ALL_HTTP
和ALL_RAW
,所有的常規(guī)Apache CGI環(huán)境變量都可以通過(guò)GetServerVariable
得到。
Apache 2.0 mod_isapi
支持后來(lái)版本的ISAPI規(guī)范中的新增功能,比如對(duì)異步I/O的有限仿真及TransmitFile
語(yǔ)義。Apache同時(shí)也支持ISAPI .dlls 的預(yù)載入以提高性能,以上這些在 Apache1.3 mod_isapi
都沒(méi)有實(shí)現(xiàn)。
說(shuō)明 | 把ISAPI擴(kuò)展的HSE_APPEND_LOG_PARAMETER 請(qǐng)求記錄在錯(cuò)誤日志中 |
---|---|
語(yǔ)法 | ISAPIAppendLogToErrors on|off |
默認(rèn)值 | ISAPIAppendLogToErrors off |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項(xiàng) | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_isapi |
把ISAPI擴(kuò)展的HSE_APPEND_LOG_PARAMETER
請(qǐng)求記錄在錯(cuò)誤日志中
說(shuō)明 | 把ISAPI擴(kuò)展的HSE_APPEND_LOG_PARAMETER 請(qǐng)求記錄在查詢(xún)域中 |
---|---|
語(yǔ)法 | ISAPIAppendLogToQuery on|off |
默認(rèn)值 | ISAPIAppendLogToQuery on |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項(xiàng) | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_isapi |
把ISAPI擴(kuò)展的HSE_APPEND_LOG_PARAMETER
請(qǐng)求記錄在查詢(xún)域中(追加在CustomLog
%q
元素后面)。
說(shuō)明 | 啟動(dòng)時(shí)載入的ISAPI動(dòng)態(tài)連接庫(kù) |
---|---|
語(yǔ)法 | ISAPICacheFile file-path [file-path] ... |
作用域 | server config, virtual host |
狀態(tài) | 基本(B) |
模塊 | mod_isapi |
指定一個(gè)需在Apache服務(wù)啟動(dòng)的時(shí)候載入的以空格分隔的文件列表,這些文件駐留在系統(tǒng)中直至服務(wù)器關(guān)閉。本指令可以為每個(gè)需要的ISAPI動(dòng)態(tài)連接庫(kù)文件所重復(fù)。應(yīng)指定每個(gè)文件的路徑。如果不是絕對(duì)路徑,則會(huì)基于ServerRoot
來(lái)處理相對(duì)路徑。
說(shuō)明 | 為ISAPI回調(diào)模擬異步支持 |
---|---|
語(yǔ)法 | ISAPIFakeAsync on|off |
默認(rèn)值 | ISAPIFakeAsync off |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項(xiàng) | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_isapi |
當(dāng)設(shè)為on時(shí),模擬ISAPI回調(diào)的異步支持。
說(shuō)明 | 記錄ISAPI不支持的功能調(diào)用 |
---|---|
語(yǔ)法 | ISAPILogNotSupported on|off |
默認(rèn)值 | ISAPILogNotSupported off |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項(xiàng) | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_isapi |
在服務(wù)錯(cuò)誤日志中記錄所有ISAPI擴(kuò)展不支持的請(qǐng)求。本指令可以幫助系統(tǒng)管理員跟蹤錯(cuò)誤。把這個(gè)指令定義為on以后,如果所有的ISAPI模塊都工作良好,應(yīng)該把它設(shè)回為Off。
說(shuō)明 | 傳送到ISAPI擴(kuò)展的預(yù)讀緩沖區(qū)大小 |
---|---|
語(yǔ)法 | ISAPIReadAheadBuffer size |
默認(rèn)值 | ISAPIReadAheadBuffer 49152 |
作用域 | server config, virtual host, directory, .htaccess |
覆蓋項(xiàng) | FileInfo |
狀態(tài) | 基本(B) |
模塊 | mod_isapi |
定義初始調(diào)用時(shí)傳送到ISAPI擴(kuò)展的最大預(yù)讀緩沖區(qū)大小。所有其它的數(shù)據(jù)必須通過(guò)ReadClient
回調(diào)功能得到;部分ISAPI擴(kuò)展可能不支持ReadClient
功能。請(qǐng)參考ISAPI擴(kuò)展本身對(duì)相關(guān)問(wèn)題描述。