zoukankan      html  css  js  c++  java
  • 一个用户在浏览器上输入网址怎么走到我们写的.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,无论参数,中间结果 最终结果,都保存在其中

    本文来自博客园,作者:小换哥,转载请注明原文链接:https://www.cnblogs.com/haunge/p/13875913.html

  • 相关阅读:
    POJ3480 John 博弈论 anti-nim anti-SG
    POJ2068 Nim 博弈论 dp
    POJ 1740 A New Stone Game 又是博弈论配对找规律orz 博弈论 规律
    Python复习之下划线的含义
    django 模板语法和三种返回方式
    Python自动化之一对多
    Python自动化之django的ORM
    Python自动化之django的ORM操作——Python源码
    django orm字段和参数
    Python自动化之django视图
  • 原文地址:https://www.cnblogs.com/haunge/p/13875913.html
Copyright © 2011-2022 走看看