<-
Apache > HTTP Server > 文件 > 2.4 版 > 模組

Apache 模組 mod_isapi

可用語言:  en  |  fr  |  ko 

說明Windows 中 Apache 的 ISAPI 延伸模組
狀態基本
模組識別碼isapi_module
原始檔mod_isapi.c
相容性僅 Win32

摘要

此模組實作了 Internet 伺服器擴充函數 API。它能讓 Internet 伺服器擴充模組(例如 ISAPI .dll 模組)在 Apache for Windows 中提供服務,但會受到以下限制的影響。

ISAPI 擴充模組(.dll 檔)是由第三方編寫。Apache 組織並未撰寫這些模組,因此我們不提供支援。如果您在執行其 ISAPI 擴充時遇到問題,請直接聯絡 ISAPI 的作者。不要在 Apache 的清單或錯誤回報頁面上公布此類問題。

Support Apache!

主題

指令

錯誤修正檢查清單

請參閱

top

用法

在伺服器設定檔中,使用 AddHandler 指令,以將 ISAPI 檔與 isapi-handler 處理常式做連結,並透過其副檔名進行對應。若要讓任何 .dll 檔都能處理為 ISAPI 擴充模組,請編輯 httpd.conf 檔,並新增以下列

AddHandler isapi-handler .dll
在 Apache 伺服器的舊版本中, 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

檢閱 其他注意事項程式設計師期刊,取得 mod_isapi 提供的特定 ISAPI 支援的額外詳細資料和說明。

top

其他注意事項

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 過濾器。日後可能會新增過濾器支援,但目前尚無支援計畫。

top

程式設計師期刊

如果您正在撰寫 Apache 2.0 mod_isapi 模組,您必須將對 ServerSupportFunction 的呼叫限制在下列指令

HSE_REQ_SEND_URL_REDIRECT_RESP
將使用者重新導向至另一個位置。
這必須是完整的 URL(例如 http://server/location)。
HSE_REQ_SEND_URL
將使用者重新導向至另一個位置。
這不能是完整的 URL,您不能傳遞通訊協定或伺服器名稱(例如只要 /location)。
這重新導向是由伺服器處理,而不是瀏覽器。

警告

在最近的文件中,Microsoft 顯然放棄了這兩個 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
如果要求已中止,將回報 false。

對於不支援的 ServerSupportFunction 呼叫,Apache 會回傳 FALSE,並將 GetLastError 值設定為 ERROR_INVALID_PARAMETER

ReadClient 會擷取超過初始緩衝區(由 ISAPIReadAheadBuffer 定義)的請求內文。根據 ISAPIReadAheadBuffer 設定(呼叫 ISAPI 處理常式前的緩衝區位元組數),較短的請求會在呼叫它時完整傳送至擴充功能。如果請求較長,ISAPI 擴充功能必須使用 ReadClient 擷取剩下的請求內文。

WriteClient 獲得支援,但只有搭配 HSE_IO_SYNC 旗標或沒有選項旗標(值為 0)的情況下。任何其他 WriteClient 請求將遭到拒絕,並回傳值 FALSE,以及 GetLastErrorERROR_INVALID_PARAMETER

支援 GetServerVariable,儘管不存在延伸伺服器變數(由其他伺服器定義)。所有慣用的 Apache CGI 環境變數都可以從 GetServerVariable 中取得,以及 ALL_HTTPALL_RAW 值。

從 httpd 2.0 開始,mod_isapi 支援 ISAPI 規格後續版本中新增的其他功能,以及異步 I/O 和 TransmitFile 語意的有限模擬。Apache httpd 也支援預先載入 ISAPI .dll 以提升效能。

top

ISAPIAppendLogToErrors 指令

說明將 ISAPI 擴充功能的 HSE_APPEND_LOG_PARAMETER 請求記錄到錯誤記錄
語法ISAPIAppendLogToErrors on|off
預設值ISAPIAppendLogToErrors off
內容伺服器組態、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_isapi

將 ISAPI 擴充功能的 HSE_APPEND_LOG_PARAMETER 請求記錄到伺服器錯誤記錄。

top

ISAPIAppendLogToQuery 指令

說明將 ISAPI 擴充功能的 HSE_APPEND_LOG_PARAMETER 請求記錄到查詢欄位
語法ISAPIAppendLogToQuery on|off
預設值ISAPIAppendLogToQuery on
內容伺服器組態、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_isapi

將 ISAPI 擴充功能的 HSE_APPEND_LOG_PARAMETER 請求記錄到查詢欄位(附加到 CustomLog %q 元件)。

top

ISAPICacheFile 指令

說明啟動時要載入的 ISAPI .dll 檔案
語法ISAPICacheFile 檔案路徑 [檔案路徑] ...
內容伺服器設定、虛擬主機
狀態基本
模組mod_isapi

指定在 Apache 伺服器啟動時要載入的檔案名稱,並且在伺服器關閉前一直保持載入狀態的空白分隔清單。此指令可以為每一個想要的 ISAPI .dll 檔案重複使用。應指定每一個檔案的完整路徑名稱。如果路徑名稱不是絕對路徑,它將視為相對於 ServerRoot

top

ISAPIFakeAsync 指令

說明對 ISAPI 回應模擬非同步支援
語法ISAPIFakeAsync on|off
預設值ISAPIFakeAsync off
內容伺服器組態、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_isapi

設定為 on 時,針對 ISAPI 回應模擬非同步支援。

top

ISAPILogNotSupported 指令

說明記錄 ISAPI 擴充套件中不受支援功能的要求
語法ISAPILogNotSupported on|off
預設值ISAPILogNotSupported off
內容伺服器組態、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_isapi

在伺服器錯誤日誌中記錄所有來自 ISAPI 擴充套件中不受支援功能的要求。這可能有助於管理員找出問題。在設定為 on,且所有想要的 ISAPI 模組都運作正常後,應設定回 off。

top

ISAPIReadAheadBuffer 指令

說明傳送給 ISAPI 擴充套件的讀取超前緩衝區大小
語法ISAPIReadAheadBuffer 大小
預設值ISAPIReadAheadBuffer 49152
內容伺服器組態、虛擬主機、目錄、.htaccess
覆寫FileInfo
狀態基本
模組mod_isapi

定義在 ISAPI 擴充套件最初被呼叫時傳送給 ISAPI 擴充套件的讀取超前緩衝區的最大大小。所有剩餘的資料必須使用 ReadClient 回應模組來擷取;有些 ISAPI 擴充套件可能不支援 ReadClient 函數。請將問題轉介給 ISAPI 擴充套件的作者。

可用語言:  en  |  fr  |  ko 

top

意見

注意
這裡不是問答部分。放在這裡的意見應指向針對改善文件或伺服器的建議,如果已被實作或被認為無效/離題,我們的管理員可能會將它們移除。關於如何管理 Apache HTTP Server 的問題應導向我們的 IRC 頻道 #httpd(位於 Libera.chat),或傳送至我們的郵寄清單