Apache HTTP Server 版本2.2

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