Apache HTTP Server 版本 2.4
說明 | Windows 中 Apache 的 ISAPI 延伸模組 |
---|---|
狀態 | 基本 |
模組識別碼 | isapi_module |
原始檔 | mod_isapi.c |
相容性 | 僅 Win32 |
此模組實作了 Internet 伺服器擴充函數 API。它能讓 Internet 伺服器擴充模組(例如 ISAPI .dll 模組)在 Apache for Windows 中提供服務,但會受到以下限制的影響。
ISAPI 擴充模組(.dll 檔)是由第三方編寫。Apache 組織並未撰寫這些模組,因此我們不提供支援。如果您在執行其 ISAPI 擴充時遇到問題,請直接聯絡 ISAPI 的作者。請不要在 Apache 的清單或錯誤回報頁面上公布此類問題。
在伺服器設定檔中,使用 AddHandler
指令,以將 ISAPI 檔與 isapi-handler
處理常式做連結,並透過其副檔名進行對應。若要讓任何 .dll 檔都能處理為 ISAPI 擴充模組,請編輯 httpd.conf 檔,並新增以下列
AddHandler isapi-handler .dll
isapi-isa
才是正確的處理常式名稱,而不是 isapi-handler
。在 Apache 伺服器的 2.3 開發版本起, isapi-isa
不再有效。您需要將您的組態設定變更為改用 isapi-handler
。Apache 伺服器中沒有任何功能可以讓您不載入已請求的模組。不過,您可以使用以下語法在 httpd.conf 中預載並保持特定模組載入的狀態
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
無論您是否已預先載入過 ISAPI 擴充功能,所有 ISAPI 擴充功能都遵循與 CGI 範本相同的權限和限制。亦即,必須設定包含 ISAPI .dll 檔案的目錄中 Options
ExecCGI
。
Apache 的 ISAPI 實作符合所有 ISAPI 2.0 規範,除了關於非同步 I/O 的部分「Microsoft 專屬」擴充功能。Apache 的 I/O 模型不允許非同步讀取和寫入,方便 ISAPI 存取。如果 ISA 嘗試存取不支援的功能,包括異步 I/O,會在錯誤日誌中放置一則訊息以協助除錯。由於這些訊息可能會過於氾濫,因此 ISAPILogNotSupported Off
指令的存在是為了消除這些雜訊。
有些伺服器,例如 Microsoft IIS,會將 ISAPI 擴充功能載入伺服器並一直載入,直到記憶體用量過高,或除非指定了組態選項。Apache 目前每次要求時載入與卸載 ISAPI,除非指定了 ISAPICacheFile
指令。這的確沒效率,但 Apache 的記憶體模型使得這成為最有效的方法。很多 ISAPI 模組都與 Apache 伺服器不相容,而卸載這些模組有助於確保伺服器的穩定性。
另外,請記住 Apache 支援 ISAPI 擴充功能,但不支援 ISAPI 過濾器。日後可能會新增過濾器支援,但目前尚無支援計畫。
如果您正在撰寫 Apache 2.0 mod_isapi
模組,您必須將對 ServerSupportFunction
的呼叫限制在下列指令
HSE_REQ_SEND_URL_REDIRECT_RESP
http://server/location
)。HSE_REQ_SEND_URL
/location
)。在最近的文件中,Microsoft 顯然放棄了這兩個 HSE_REQ_SEND_URL
函式的差異。Apache 仍將它們視為具有不同需求和行為的兩個不同函式。
HSE_REQ_SEND_RESPONSE_HEADER
HSE_REQ_DONE_WITH_SESSION
HSE_REQ_MAP_URL_TO_PATH
HSE_APPEND_LOG_PARAMETER
CustomLog
指令中的 \"%{isapi-parameter}n\"
元件%q
記錄元件中,搭配 ISAPIAppendLogToQuery
On
指令ISAPIAppendLogToErrors
On
指令第一個選項,%{isapi-parameter}n
元件,隨時可用且建議使用。
HSE_REQ_IS_KEEP_CONN
HSE_REQ_SEND_RESPONSE_HEADER_EX
fKeepConn
旗標。HSE_REQ_IS_CONNECTED
對於不支援的 ServerSupportFunction
呼叫,Apache 會回傳 FALSE
,並將 GetLastError
值設定為 ERROR_INVALID_PARAMETER
。
ReadClient
會擷取超過初始緩衝區(由 ISAPIReadAheadBuffer
定義)的請求內文。根據 ISAPIReadAheadBuffer
設定(呼叫 ISAPI 處理常式前的緩衝區位元組數),較短的請求會在呼叫它時完整傳送至擴充功能。如果請求較長,ISAPI 擴充功能必須使用 ReadClient
擷取剩下的請求內文。
WriteClient
獲得支援,但只有搭配 HSE_IO_SYNC
旗標或沒有選項旗標(值為 0
)的情況下。任何其他 WriteClient
請求將遭到拒絕,並回傳值 FALSE
,以及 GetLastError
值 ERROR_INVALID_PARAMETER
。
支援 GetServerVariable
,儘管不存在延伸伺服器變數(由其他伺服器定義)。所有慣用的 Apache CGI 環境變數都可以從 GetServerVariable
中取得,以及 ALL_HTTP
和 ALL_RAW
值。
從 httpd 2.0 開始,mod_isapi
支援 ISAPI 規格後續版本中新增的其他功能,以及異步 I/O 和 TransmitFile
語意的有限模擬。Apache httpd 也支援預先載入 ISAPI .dll 以提升效能。
說明 | 將 ISAPI 擴充功能的 HSE_APPEND_LOG_PARAMETER 請求記錄到錯誤記錄 |
---|---|
語法 | ISAPIAppendLogToErrors on|off |
預設值 | ISAPIAppendLogToErrors off |
內容 | 伺服器組態、虛擬主機、目錄、.htaccess |
覆寫 | FileInfo |
狀態 | 基本 |
模組 | mod_isapi |
將 ISAPI 擴充功能的 HSE_APPEND_LOG_PARAMETER
請求記錄到伺服器錯誤記錄。
說明 | 將 ISAPI 擴充功能的 HSE_APPEND_LOG_PARAMETER 請求記錄到查詢欄位 |
---|---|
語法 | ISAPIAppendLogToQuery on|off |
預設值 | ISAPIAppendLogToQuery on |
內容 | 伺服器組態、虛擬主機、目錄、.htaccess |
覆寫 | FileInfo |
狀態 | 基本 |
模組 | mod_isapi |
將 ISAPI 擴充功能的 HSE_APPEND_LOG_PARAMETER
請求記錄到查詢欄位(附加到 CustomLog
%q
元件)。
說明 | 啟動時要載入的 ISAPI .dll 檔案 |
---|---|
語法 | ISAPICacheFile 檔案路徑 [檔案路徑] ... |
內容 | 伺服器設定、虛擬主機 |
狀態 | 基本 |
模組 | mod_isapi |
指定在 Apache 伺服器啟動時要載入的檔案名稱,並且在伺服器關閉前一直保持載入狀態的空白分隔清單。此指令可以為每一個想要的 ISAPI .dll 檔案重複使用。應指定每一個檔案的完整路徑名稱。如果路徑名稱不是絕對路徑,它將視為相對於 ServerRoot
。
說明 | 對 ISAPI 回應模擬非同步支援 |
---|---|
語法 | ISAPIFakeAsync on|off |
預設值 | ISAPIFakeAsync off |
內容 | 伺服器組態、虛擬主機、目錄、.htaccess |
覆寫 | FileInfo |
狀態 | 基本 |
模組 | mod_isapi |
設定為 on 時,針對 ISAPI 回應模擬非同步支援。