2010-10-15 72 views
0

我正在測試自己的http模塊並同時學習IIS集成管道。在我的模塊中,我註冊了以下活動:RQ_BEGIN_REQUEST,RQ_END_REQUEST,RQ_AUTHENTICATE_REQUEST,RQ_AUTHORIZE_REQUESTIIS 7 - 如果發生錯誤403.4,BeginRequest事件不會觸發

我的網站有一個頁面需要SSL,其他則不需要。當其他http://頁面被請求時,所有4個事件被觸發。當使用http://而不是https://請求此頁面時,服務器返回「403.4」您試圖訪問的頁面使用安全套接字層(SSL)進行保護。「但是,在這種情況下,僅觸發EndRequest事件。爲什麼是這樣?如果我使用https://,那麼一切都很好。

回答

0

我已經做了實驗並找到了我的問題的答案。

當客戶端請求頁面(需要使用SSL)和非SSL(http://)方法時,IIS Web Core會在其BeginRequest事件處理程序中將響應錯誤代碼設置爲403.4。其他Http請求模塊的BeginRequest事件被抑制,只有LogRequest和EndRequest事件被觸發。

因此,爲了捕獲所有這樣的客戶端請求並將http://請求重定向到https://,需要全局模塊而不是Http請求模塊。在全局模塊代碼中,爲GL_PRE_BEGIN_REQUEST註冊事件處理程序。

+0

我寫了一篇博文,其中包含測試代碼:http://sheenspace.wordpress.com/2010/10/21/writing-iis-native-module/ – Sheen 2010-10-27 10:06:16