2010-10-15 71 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