一个用户在浏览器上输入网址怎么走到我们写的.net程序中的,请求到管道处理

浏览器输入网址开始

  1:这个请求首先回去DNS。(网站回去DNS注册自己的网址对应的IP和端口)

  2:DNS解析后。返回这个网址注册的IP和端口给浏览器。

  3:浏览器把IP和端口拿到去请求这个ip端口的服务器。

  4:服务器通过监听咱们部署的网站端口。然后转发给相应的ISAPI(根据后缀转发)。ISAPI是一个接口。谁实现了这个接口,我们就可以把这个请求转发给谁。所以php实现了这个接口php_sapi,我们iis就可以部署php的网站程序。java一样也得实现java_isapi

我们就可以在iis上不是java的网站程序。

  5:咱们aspnet_ISAPI实现了isapi。iis将这个请求转发给aspnet_isapi.这个aspnet_isapi把这个请求写入到一个类似队列的一个管道。写什么呢,就是写httpworkrequest这么个包。这个包描述了这个请求。

  6:httpRuntime.ProcessRequest(请求处理入口,这个是被封装了,咱们是看不到的,除非看源码)在去这个队列里去取这个httpworkrequest包。处理。

  7:处理完了之后在交给这个队列里。aspnet_isapi把这个处理结果仍回这个队列里。

  注意:http请求是基于tcp/ip的。tcp/ip是基于socket套接字。这个链接是IIS管控的。返回处理结果后。iis释放掉这个链接。

 

 

 

 

 

 

 

 

 

 

IHttpHandler里的ProcessRequest处理这个HttpContext。而这个HttpApplication按顺序添加了25个事件,这个顺序的事件其实就是被称为管道。

 

每个http请求都要httphandler去处理。我们想要去注册(扩展)这些动作。就需要实现IHttpModule。然后往里面注册事件。

 

不过想用这个扩展,还有一步,就是去配置文件去添加你的Module。在(经典模式)<system.web>的<httpModules></httpModules>去配置。或者是去(集成模式)<system.webServer>的<httpModules></httpModules>去配置。这两个配置是针对你们发布选择的集成模式还是经典模式。

不过我们也可以自己实现这个IHttpHandler来处理具体的某个请求。

所谓管道处理模型,一个请求到了HttpApplication到事件(HttpMoudule注册),然后在到具体的一个HttpHandler。

 

通俗来讲,其实就是后台如何处理一个Http请求
定义多个事件完成处理步骤,每个事件可以扩展动作(HttpMoudule),
最后有个HttpHandler完成请求的处理,这个过程就是管道处理模型。在回到HttpApplication(httpMoudule)具体动作
还有一个全局的上下文环境httpcontext,无论参数,中间结果 最终结果,都保存在其中

posted @ 2020-10-27 22:51  小换哥  阅读(137)  评论(0编辑  收藏  举报