我正在测试自己的http模块并同时研究IIS集成管道。在我的模块中,我注册了事件:RQ_BEGIN_REQUEST,RQ_END_REQUEST,RQ_AUTHENTICATE_REQUEST,RQ_AUTHORIZE_REQUEST
我的网站有一个页面需要SSL,其他页面则不需要。当请求其他http://页面时,将触发所有4个事件。当使用http://而不是https://请求此页面时,服务器返回“403.4您尝试访问的页面使用安全套接字层(SSL)进行保护。”但是,在这种情况下只触发EndRequest事件。为什么是这样?如果我使用https://,那么一切都很好。
答案 0 :(得分:0)
我做了实验并找到了我的问题的答案。
当客户端请求页面(需要SSL)使用非SSL(http://)方法时,IIS Web Core会在其BeginRequest事件处理程序中将响应错误代码设置为403.4。其他Http请求模块的BeginRequest事件被抑制,只触发LogRequest和EndRequest事件。
因此,为了捕获所有此类客户端请求并将http://请求重定向到https://,需要使用全局模块而不是Http请求模块。在全局模块代码中,为GL_PRE_BEGIN_REQUEST注册事件处理程序。