zoukankan      html  css  js  c++  java
  • ASP.NET页面运行机制以及请求处理流程

    一. 浏览器和IIS(or other webserver)交互机制

    1. 浏览器根据Http协议解析输入网址 生成请求报文数据

    2. 浏览器从DNS服务器获得域名对应的服务器电脑IP,将 请求报文 通过Socket发送到服务器电脑。

    (注意:Http协议 规定服务器软件使用的默认端口是80,通俗的说,就是如果浏览器访问一个网站页面,浏览器默认就是将 请求报文 发送到服务器80端口,而服务器负责监听这个端口的软件一般就是服务器软件—比如asp.net用的IIS,java用的Tomcat。)

    3.IIS接收到请求报文,分析请求报文,从中获取请求的页面路径,判断页面的后缀名:

    • 如果是静态页面(.html/.jpg/.css/.js等),则直接由IIS软件的组件读取该文件内容,并将内容通过Socket发送回浏览器;

    • 如果此时请求的是一个动态页面(.aspx/.ashx),IIS自己就处理不了 (因为IIS软件开发出来的时候,ASP.NET程序还不存在呢) 。所以,IIS就去它的 扩展程序映射表 中根据被请求文件后缀名 查看是否有能够处理这种文件的扩展程序

    • 如果IIS根据后缀名找到对应的处理程序,则通过调用此程序来处理浏览器发送来的请求报文。 

    二. ASP.NET页面运行机制以及请求处理流程

    上面说到IIS将像ASPX这样的页面分配给aspnet_isapi.dll,接着处理如下:

    1、aspnet_isapi.dll则会 通过一个Http PipeLine的管道将这个Http请求发给w3wp.exe(iis 工作者进程,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe),之后asp.net framework就会通过HttpRuntime来处理这个Http请求。

    2、HttpRuntime首先会确定处理该请求的类名,HttpRuntime通过公共接口IHttpHandler来调用该类获取被请求资源的类的实例。

    3、调用HttpRuntime.ProcessRequest开始处理要发送到浏览器的页面,具体说就是创建一个HttpContext实例,它封装了所有与请求有关的http特有的信息,并初始化一个Write对象用于缓存标记代码。

    4、HttpRuntime使用上下文信息查找或新建能处理该请求的Web应用程序的对象。由HttpApplication Factory负责返回HttpApplication实例。

    5、HttpApplication实例会读取web.config中所有HttpModule的配置。

    5、HttpApplication对象使用IHttpHandlerFactory类型的实例返回HttpHandler(http处理程序)给HttpRuntime对象。一个页面只是个http处理程序对象。

    6、最后由HttpRuntime对象调用IHttpHandler的页面对象的ProcessRequest方法。

  • 相关阅读:
    hdu 1181 (搜索BFS,深搜DFS,并查集)
    [置顶] ZSTACK之OSAL_Nv非易失性存储解读上
    Android中利用Fragment显示为两屏
    WCF也可以做聊天程序
    Myeclipse 连接MSSqlServer
    Mysql和Oracle的卸载
    第 5堂作业
    hdu 3421 Max Sum II
    【求助】一个菜鸟java作业,帮忙看一下错在哪儿,题目是判断回文数
    netcat使用
  • 原文地址:https://www.cnblogs.com/cicistudy/p/5821747.html
Copyright © 2011-2022 走看看