- 浏览: 190063 次
- 性别:
- 来自: 深圳
文章分类
最新评论
客户端
第一步:用户在地址栏里面输入地址,或者是提交表单
第二步:浏览器内部会将请求封装成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;
}
************************************************
在此还做了处理,如果是第一次请求的话,则首先初始化特殊的应用程序池,然后创建一个
发表评论
文章已被作者锁定,不允许评论。
-
使用SignalR构建一个最基本的web聊天室
2015-01-06 15:09 770使用SignalR,可以使用服务器消息推送到客户端,件demo ... -
一台服务器访问另外一台服务器的共享目录
2014-12-19 10:50 611情况:A服务器的asp.ne程序需访问B服务器的共享目录, ... -
windows7 IIS7报错:如果要使用托管的处理程序,请安装 ASP.NET
2014-12-19 10:31 2415aspx 常见错误 CS0016: 未能写入输出文件“c:/ ... -
windows7 IIS7报错:如果要使用托管的处理程序,请安装 ASP.NET
2014-12-19 10:30 675windows7 IIS7报错:如果要使用托管的处理程序,请 ... -
Cookie小知识
2014-12-17 11:02 600如果cookie设置了过期时间,cookie就会保存在硬盘中 ... -
一个避免用户重复点击按钮造成重复数据的小技巧
2013-01-13 16:13 1231<script> //启用 ... -
SWFupload 上传控件的使用的使用
2012-12-02 16:17 875-- 首先说个解决 ie兼容的标签 <meta ht ... -
评论的延迟加载
2012-11-10 18:34 787看verycd、cnbeta的评论区域很奇怪,每次看完了正文, ... -
SessionID的本质
2012-11-05 23:08 711一、客户端用cookie保存了sessionID 客户 ... -
进程管理运用,防盗链,权限限制
2012-11-05 22:58 596图片防止盗链 void Appl ... -
进程外session配置
2012-11-05 22:57 882进程外session StateServer 对象必须可序列 ... -
分页底层实现(超原理)
2012-10-16 22:19 960--样式 .paginator{ font: 12px ... -
C#,FTP上传的代码 FtpWebRequest
2012-08-24 22:46 965private void Upload(string file ... -
.net ajax控件实现百度,谷歌智能搜索
2012-08-08 22:11 903首先创建一个webservice,不懂也没关系,会用 ... -
asp.net几种开源上传控件,flash,ajax版,支持多文件
2012-08-08 22:11 19481、AspnetUpload 地址:http://www.a ... -
js和C#中的进制转换方法
2012-08-08 22:12 784在.net Framework中,System.Convert ... -
下拉框下的树形结构数据的绑定
2012-08-12 22:12 856privatevoid BindDropDownLi ... -
Repeater 控件实现无刷新分页
2012-08-12 22:13 1285本文讲述的是如何利用 XMLHttpRequest ... -
.net文件上传的各种操作及创建文件夹和删除上传的文件方法
2012-08-12 22:15 940aspx中<tr><td align=& ... -
使用HTML,CSS快速导出数据到Excel
2012-08-12 22:16 1283一般是导出到txt,csv或excel。txt和cs ...
相关推荐
《DailyNet:Android轻量级网络请求框架及生命周期管理》 在移动开发领域,尤其是在Android平台上,网络请求是应用程序不可或缺的一部分。为了简化网络通信过程,许多开发者选择使用网络请求库来处理HTTP请求。其中...
ASP.NET生命周期是Web应用程序开发中的核心概念,它涵盖了从客户端浏览器发起请求到服务器响应的整个过程。这个生命周期涉及多个阶段,对于理解和优化ASP.NET应用程序的性能至关重要。 首先,当一个HTTP请求到达Web...
Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...
UIView的生命周期对于理解iOS应用中视图的加载和管理至关重要。在开发iOS应用时,了解...在实际开发过程中,开发者应根据具体的应用需求和生命周期方法的特点,合理安排各种初始化和清理工作,保证应用的高质量运行。
在 IIS7.0 集成模式下,ASP.NET 应用程序的生命周期可以分为几个关键阶段,每个阶段都涉及不同的处理过程。理解这些阶段对于优化应用程序性能、调试错误以及更好地管理资源至关重要。 #### 三、IIS7.0 的集成管道 ...
在探讨Servlet的执行过程与生命周期之前,我们首先明确Servlet的基本概念:Servlet是一种服务器端的Java应用程序,它处理客户端发送的请求,并生成动态响应。Servlet通常运行在Web容器(如Tomcat、Jetty等)中,能够...
### SERVLET生命周期与JSP生命周期比较 #### 一、引言 在现代Web开发中,Servlet和JSP是两种非常重要的技术,它们都属于Java EE平台的一部分,主要用于构建动态Web应用程序。这两种技术各有特点,但又紧密相关,...
Ability生命周期是指从创建到销毁的过程中,Ability所经历的一系列状态变化。理解并掌握Ability的生命周期对于开发高效、稳定的HarmonyOS应用至关重要。现在,我们将深入探讨Ability生命周期及其重要概念。 1. **...
Bean的生命周期是指Bean从创建到销毁的整个过程。这个过程可以分为九个阶段: 1. 实例化前:在这个阶段,Bean的属性已经设置完毕,但是还没有实例化。 2. 实例化:在这个阶段,Bean已经实例化,但是还没有进行任何...
Android生命周期是指一个Activity、Service、BroadcastReceiver或ContentProvider从创建到销毁的过程。每个组件都有其特定的生命周期方法,开发者需要根据这些方法来编写代码,确保应用程序能够正确响应系统事件,如...
在实际开发中,我们可以利用Service的生命周期来实现各种功能,如后台音乐播放、定时任务、网络请求等。ServiceLifeCircleTest可能是一个测试项目,用于模拟和测试Service的不同生命周期状态,通过这样的实践,...
此外,生命周期方法也是实现事件监听和通信的关键,比如通过onActivityResult()处理Activity间的通信,或者在onPause()中停止正在进行的网络请求,以避免占用资源。 在实际开发中,我们可能会遇到Activity和...
在深入理解JSF请求处理生命周期之前,我们先要明白JSF的核心目标是简化Web开发,尤其是处理用户输入和更新服务器端状态的过程。生命周期的概念在JSF中扮演着至关重要的角色,因为它自动化了许多传统Web技术中需要...
Activity 的生命周期是指Activity从创建到销毁的整个过程。这个过程中包含了一系列的方法调用,这些方法按特定的顺序被调用,形成了Activity的生命周期。 ##### 1. 启动状态 当Activity处于启动状态时,会依次执行...
页面生命周期是指一个 ASPX 页面从被请求到处理完毕并发送响应的整个过程。熟悉这个过程有助于开发者更好地控制页面行为,优化性能,并确保页面能够正确地响应用户的操作。 #### 二、主要阶段 ASPX 页面生命周期...
ASP生命周期指的是从客户端请求一个ASP页面到该页面处理完毕并返回给客户端的整个过程。理解ASP的生命周期对于开发高效、稳定的ASP应用至关重要。 #### ASP 生命周期的各阶段 1. **请求接收阶段** 当客户端通过...
页面生命周期指的是一个ASP.NET页面从创建到销毁的过程。这个过程可以分为以下几个阶段: 1. **初始化 (Init)**:在这个阶段,页面及其控件被创建。控件可以在此阶段设置其属性,但不能执行业务逻辑。 2. **加载...
ASP.NET生命周期是Web开发中的核心概念,它详细描述了从客户端请求到服务器响应的整个过程。这个生命周期包括多个阶段,每个阶段都有特定的任务和事件,理解这些阶段对于优化和调试ASP.NET应用程序至关重要。 首先...
在Spring框架中,Bean的生命周期是指从创建到销毁的整个过程。这个过程包含了初始化、正常使用以及最终的销毁几个阶段。了解并掌握Spring Bean的生命周期对于优化应用性能和资源管理至关重要。接下来,我们将深入...
实际运行阶段是在客户端首次请求JSP页面后发生的一系列步骤,包括装载和实例化、初始化、请求处理以及生命周期终结。 ##### 1. 装载和实例化 当服务器接收到客户端的请求时,它会查找缓存中的JSP页面实现类。如果找...