HTTP 流程
asp.net 中http请求的页面通过Imodul,Ihandler,Page页面,处理成HTML代码 返回到IIS 中去了
HTTP.sys 是操作系统的核心组件,是操作系统侦听HTTP请求的驱动程序,
HTTP.sys 获取请求后inetinfo.exe(Internet Information Services)就是IIS的处理程序,
IIS把HTTP请求通过 ISAPI(Internet Service application pregrams interface) 系统筛选,
再在CRL里面生成一个httpapplication 创建httprequest httpresponse 等对象,在传递到httpmodule 再到httphandler 再到httpmodule 再到 httpapplication 把生成页面返回到 HTTP .sys 发回请求端。生成页面,
所有asp.net页面都继承Page类。而Page继承Httphandler ,也就是说所有asp.net页面实际上都实现Ihttphandler ,执行返回HTML代码,或者数据流。极端思维:我们甚至不用HTMl页面直接在 httphandler 返回数据量或者HTML代码。就行。
HTTP请求------>Http.sys捕获------->IIS处理------>ISAPI处理(根据不同后缀名,找对应的处理程序)----->创建HTTPAplication(包含httprequest,httpresponse等对象)------>Httpmodule----->IHttphandler(所以得Page页面都实现了个接口)------>Httpmodule----->IIS------>HTTP.sys---->返回给客户端
ISAPI 对应处理程序实际上是IHttphandler来实现的;
httphandler 在web.config中的配置
path:请求的正则匹配,只有满足匹配时才执行这个httphandler
verb:http请求的方式;如:get post,head,debug。四种方式
type:httphandler的命名空间
<httpHandlers> <add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> <add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> <add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> <add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> <add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> <add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> <add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> </httpHandlers>
httpmodule在web.config 中的配置
name:httpmoudule的名称 type:httpmodule的命名空间;
<httpModules> <add name="Profile" type="System.Web.Profile.ProfileModule" /> <add name="ErrorHandlerModule" type="System.Web.Mobile.ErrorHandlerModule, System.Web.Mobile, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" /> <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </httpModules>
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 用一种新的分类方法梳理设计模式的脉络