`

生命周期请求过程

 
阅读更多

客户端
第一步:用户在地址栏里面输入地址,或者是提交表单
第二步:浏览器内部会将请求封装成HTTP请求报文,并建立Socket连接发送HTTP请求到服务器端
第三步:等待服务器端响应
服务器端:
 1、内核模块
 1.1 内核模块(HTTP.SYS)监听80端口
 1.2 监听到客户端的连接,并解析出请求的协议以及访问的端口
 1.3 查询注册表,并将此请求交给具体处理的进程(默认IIS会注册此过滤模块),此时请求分发给IIS
 -----------------------------------华丽的分割------------------------------------------------------------------------
 2、IIS模块
 2.1 请求来了之后,IIS首先进行校验请求的身份
 2.2 检查请求的文件的后缀,如果是静态文件则直接处理返回(比如:js,html,css,png等)
 2.3 如果是IIS处理不了的动态文件,则直接将请求交给扩展处理程序(比如:.aspx,.ashx,.ascx请求交给aspnet_isapi.dll处理【aspnet_isapi.dll
 是在.Net Framework安装的时候注册的。如果是先安装.Net Framework 后安装IIS可以使用命令:aspnet_regiis -i来进行安装(在cmd和vs的命里行
 里面都要执行一下)】)
 
 IIS内部执行的过程:请求从内核拿到后,交给了w3svc服务,然后此服务去 问IIS要元数据信息,当前请求交给哪个扩展处理。
 -----------------------------------华丽的分割------------------------------------------------------------------------
 3、工作进程阶段(workprocess)IIS6:w3wp.exe  IIS5:aspnet_wp.exe
 下面写的都是针对IIS6和IIS7经典过程:
 3.1 请求先到扩展模块:aspent_isapi.dll(这是一个非托管的程序集,微软写的一个实现了IIS扩展接口的一个COM的程序集。并且已经注册到了IIS
 的扩展中),它是非托管环境和托管环境的桥梁,它负责将请求的报文数据交给aspnet runtime,另外负责将aspent处理后的响应交还给IIS。另外此
 扩展会负责第一次请求来的时候,启动aspent 的runtime(appdomain等)
 -----------------------------------华丽的分割------------------------------------------------------------------------
 以下是托管环境中的代码(我们可以看到所有的源码)
 3.2 请求到达ISAPIRuntime
 此时请求交给public int ProcessRequest(IntPtr ecb, int iWRType)方法处理,其中第一个参数:ecb是windows操作系统的一个句柄,
 句柄的概念:句柄是windows操作系统特殊的标识,代表着操作系统的一个资源,32位操作系统是一个32位的数字,而64位的那就是64位的(了解即可);
    ecb非常niublity。拿到ecb后就可以拿到请求报文的所有的东西,在ProcessRequest方法内部,通过ecb创建了一个HttpWorkRequest实例【HttpWorkRequest
 是一个很原始的对HTTP请求报文做了简单封装,另外封装了对ecb返回数据的封装,也就是说请求都会从这里获得,响应也是从这里返回】 
 3.3 请求交给HttpRuntime类
 请求交给HttpRuntime的private void ProcessRequestInternal(HttpWorkerRequest wr)
 
 第一步:通过HttpWorkerRequest创建HttpContext上下文,此上下文会在整个Appliaction管道中流动,而且是线程安全的,HttpContext
 包含了HttpRequest对象和HttpResponse对象,它们分别封装了Http请求的请求报文以及响应的信息。
 
    第二步:获取Appliaction实例
 HttpRuntime自己不处理当前请求,而是交给一个代理对象HttpAppliaction实例。
    HttpAppliaction实例是通过如下代码获取的:
 IHttpHandler applicationInstance = HttpApplicationFactory.GetApplicationInstance(context);
    我们看到了这是做了一个对象池技术,因为HttpAppliaction创建是通过将aspnet项目里面的Global.asax编译成HttpAppliaction类型,然后
 通过反射创建出来,所以实例很宝贵,创建非常浪费性能,微软为了提高性能,使用对象池技术,使得HttpAppliaction得到了重用。在源码内部
 我们看到了对象池使用了lock栈进行了管理。可以看一下反射的代码:
 private HttpApplication GetNormalApplicationInstance(HttpContext context)
 {
  HttpApplication application = null;
  lock (this._freeList)
  {
   if (this._numFreeAppInstances > 0)
   {
    application = (HttpApplication) this._freeList.Pop();
    this._numFreeAppInstances--;
    if (this._numFreeAppInstances < this._minFreeAppInstances)
    {
     this._minFreeAppInstances = this._numFreeAppInstances;
    }
   }
  }
  if (application == null)
  {
   application = (HttpApplication) HttpRuntime.CreateNonPublicInstance(this._theApplicationType);
   using (new ApplicationImpersonationContext())
   {
    application.InitInternal(context, this._state, this._eventHandlerMethods);
   }
  }
  return application;
 }
 
 ************************************************
 在此还做了处理,如果是第一次请求的话,则首先初始化特殊的应用程序池,然后创建一个
 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android-DailyNet简单易用的Android网络请求框架自动绑定生命周期调度请求

    《DailyNet:Android轻量级网络请求框架及生命周期管理》 在移动开发领域,尤其是在Android平台上,网络请求是应用程序不可或缺的一部分。为了简化网络通信过程,许多开发者选择使用网络请求库来处理HTTP请求。其中...

    asp.net生命周期

    ASP.NET生命周期是Web应用程序开发中的核心概念,它涵盖了从客户端浏览器发起请求到服务器响应的整个过程。这个生命周期涉及多个阶段,对于理解和优化ASP.NET应用程序的性能至关重要。 首先,当一个HTTP请求到达Web...

    spring bean的生命周期

    Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...

    UIView的生命周期

    UIView的生命周期对于理解iOS应用中视图的加载和管理至关重要。在开发iOS应用时,了解...在实际开发过程中,开发者应根据具体的应用需求和生命周期方法的特点,合理安排各种初始化和清理工作,保证应用的高质量运行。

    ASP.NET 应用程序生命周期

    在 IIS7.0 集成模式下,ASP.NET 应用程序的生命周期可以分为几个关键阶段,每个阶段都涉及不同的处理过程。理解这些阶段对于优化应用程序性能、调试错误以及更好地管理资源至关重要。 #### 三、IIS7.0 的集成管道 ...

    servlet执行过程与生命周期

    在探讨Servlet的执行过程与生命周期之前,我们首先明确Servlet的基本概念:Servlet是一种服务器端的Java应用程序,它处理客户端发送的请求,并生成动态响应。Servlet通常运行在Web容器(如Tomcat、Jetty等)中,能够...

    SERVLET生命周期与JSP生命周期比较

    ### SERVLET生命周期与JSP生命周期比较 #### 一、引言 在现代Web开发中,Servlet和JSP是两种非常重要的技术,它们都属于Java EE平台的一部分,主要用于构建动态Web应用程序。这两种技术各有特点,但又紧密相关,...

    Ability生命周期.zip

    Ability生命周期是指从创建到销毁的过程中,Ability所经历的一系列状态变化。理解并掌握Ability的生命周期对于开发高效、稳定的HarmonyOS应用至关重要。现在,我们将深入探讨Ability生命周期及其重要概念。 1. **...

    详解Spring中Bean的生命周期和作用域及实现方式

    Bean的生命周期是指Bean从创建到销毁的整个过程。这个过程可以分为九个阶段: 1. 实例化前:在这个阶段,Bean的属性已经设置完毕,但是还没有实例化。 2. 实例化:在这个阶段,Bean已经实例化,但是还没有进行任何...

    浅谈Android生命周期

    Android生命周期是指一个Activity、Service、BroadcastReceiver或ContentProvider从创建到销毁的过程。每个组件都有其特定的生命周期方法,开发者需要根据这些方法来编写代码,确保应用程序能够正确响应系统事件,如...

    android Service的生命周期

    在实际开发中,我们可以利用Service的生命周期来实现各种功能,如后台音乐播放、定时任务、网络请求等。ServiceLifeCircleTest可能是一个测试项目,用于模拟和测试Service的不同生命周期状态,通过这样的实践,...

    Activity和Fragment生命周期研究

    此外,生命周期方法也是实现事件监听和通信的关键,比如通过onActivityResult()处理Activity间的通信,或者在onPause()中停止正在进行的网络请求,以避免占用资源。 在实际开发中,我们可能会遇到Activity和...

    JSF 生命周期 实例详解

    在深入理解JSF请求处理生命周期之前,我们先要明白JSF的核心目标是简化Web开发,尤其是处理用户输入和更新服务器端状态的过程。生命周期的概念在JSF中扮演着至关重要的角色,因为它自动化了许多传统Web技术中需要...

    Android生命周期 整合

    Activity 的生命周期是指Activity从创建到销毁的整个过程。这个过程中包含了一系列的方法调用,这些方法按特定的顺序被调用,形成了Activity的生命周期。 ##### 1. 启动状态 当Activity处于启动状态时,会依次执行...

    Aspx页面生命周期

    页面生命周期是指一个 ASPX 页面从被请求到处理完毕并发送响应的整个过程。熟悉这个过程有助于开发者更好地控制页面行为,优化性能,并确保页面能够正确地响应用户的操作。 #### 二、主要阶段 ASPX 页面生命周期...

    ASP生命周期

    ASP生命周期指的是从客户端请求一个ASP页面到该页面处理完毕并返回给客户端的整个过程。理解ASP的生命周期对于开发高效、稳定的ASP应用至关重要。 #### ASP 生命周期的各阶段 1. **请求接收阶段** 当客户端通过...

    通俗理解页面生命周期

    页面生命周期指的是一个ASP.NET页面从创建到销毁的过程。这个过程可以分为以下几个阶段: 1. **初始化 (Init)**:在这个阶段,页面及其控件被创建。控件可以在此阶段设置其属性,但不能执行业务逻辑。 2. **加载...

    ASP.NET生命周期图片详解

    ASP.NET生命周期是Web开发中的核心概念,它详细描述了从客户端请求到服务器响应的整个过程。这个生命周期包括多个阶段,每个阶段都有特定的任务和事件,理解这些阶段对于优化和调试ASP.NET应用程序至关重要。 首先...

    Spring bean生命周期demo

    在Spring框架中,Bean的生命周期是指从创建到销毁的整个过程。这个过程包含了初始化、正常使用以及最终的销毁几个阶段。了解并掌握Spring Bean的生命周期对于优化应用性能和资源管理至关重要。接下来,我们将深入...

    JSP的生命周期

    实际运行阶段是在客户端首次请求JSP页面后发生的一系列步骤,包括装载和实例化、初始化、请求处理以及生命周期终结。 ##### 1. 装载和实例化 当服务器接收到客户端的请求时,它会查找缓存中的JSP页面实现类。如果找...

Global site tag (gtag.js) - Google Analytics