Iis 7 IIS 7-如果发生错误403.4,则不会触发BeginRequest事件

Iis 7 IIS 7-如果发生错误403.4,则不会触发BeginRequest事件,iis-7,Iis 7,我正在测试自己的http模块,同时研究IIS集成管道。在我的模块中,我注册了事件:RQ_开始请求、RQ_结束请求、RQ_认证请求、RQ_授权请求 我的网站有一个页面需要SSL,其他页面不需要。当请求其他http://页面时,将触发所有4个事件。当使用http://而不是https://请求此页面时,服务器返回403.4您尝试访问的页面由安全套接字层SSL保护。但是,在这种情况下,只会触发EndRequest事件。为什么会这样?如果我使用https://,那么一切都很好。我已经做了实验,找到了问题

我正在测试自己的http模块,同时研究IIS集成管道。在我的模块中,我注册了事件:RQ_开始请求、RQ_结束请求、RQ_认证请求、RQ_授权请求


我的网站有一个页面需要SSL,其他页面不需要。当请求其他http://页面时,将触发所有4个事件。当使用http://而不是https://请求此页面时,服务器返回403.4您尝试访问的页面由安全套接字层SSL保护。但是,在这种情况下,只会触发EndRequest事件。为什么会这样?如果我使用https://,那么一切都很好。

我已经做了实验,找到了问题的答案

当需要SSL的客户端请求页面使用非SSL http://方法时,IIS Web Core在其BeginRequest事件处理程序中将响应错误代码设置为403.4。禁止其他Http请求模块的BeginRequest事件,仅触发LogRequest和EndRequest事件


因此,为了捕获所有此类客户机请求并将http://请求重定向到https://,需要使用全局模块而不是http请求模块。在全局模块代码中,为GL_PRE_BEGIN_请求注册事件处理程序。

我写了一篇博文,其中包括测试代码: