当前位置: 首页 > 编程日记 > 正文

HttpHand和HttpModule的详细解释,包括Asp.Net对Http请求的处理流程。

了解当用户对一个.aspx页面提出请求时,后台的Web服务器的动作流程。当对这个流程了解后,我们就会明白HttpHandler和HttpModule的作用了。

首先,来了解一下IIS系统。它是一个程序,负责对网站的内容进行管理,以及对客户的请求(就是Http请求)做出反应。当用户对一个页面提出请求时,IIS做如下反应(忽略权限):
1.把对方请求的虚拟路径转换成物理路径
2.根据物理路径搜索请求的文件
3.找到文件后,获取文件的内容
4.生成Http头信息。
  PS:关于IIS和IE生成的Http头信息(元数据),可以用这个工具:http://www.blunck.info/iehttpheaders.html,它是IE的一个插件,专门查看头信息的。
5.向客户端发送所有的文件内容:首先是头信息,然后是Html内容,最后是其它文件的内容。
6.客户端IE浏览器获得信息后,解析文件内容,找出其中的引用文件,如.js .css .gif等,向IIS请求这些文件。
7.IIS获取请求后,发送文件内容。
8.当浏览器获取所有内容后,生成内容界面,客户就看到图像/文本/其它内容了。

但是IIS有个缺点,即它仅仅支持静态html页面的内容,就是说,他只能分析如.htm,.html这样的文件内容。像一些动态内容的页面,含有服务器端操作代码的页面类型,如.asp,.aspx,.cgi,.php等,IIS不认识这些专用的标记,它就会把它当作文本,丝毫不做处理发送到客户端。

为了解决这个问题。IIS推出了一种机制,叫做ISAPI的开放扩展,这个东西是一个标准组件(COM组件),他是一个过滤器+跳转程序,如果安装了专门的扩展,那么在访问IIS所不能处理的文件时,如.asp和.aspx文件,IIS就会在自己的进程里面启动这个扩展。刚才说了,ISAPI首先是个过滤器,他在注册到IIS的时候,会把每个扩展可以处理的文件扩展名注册到IIS里面。扩展启动后,就根据定义好的方式来处理IIS所不能处理的文件,然后把控制权跳转到专门处理代码的进程中。让这个进程开始处理代码,生成标准的HTML代码,生成后把这些代码加入到原有的Html中,最后把完整的Html返回给IIS,IIS再把内容发送到客户端。

我拿一个请求asp.net页面的执行步骤说明:
1 客户端IE浏览器通过Http协议向一个Web服务器提出请求,如
  http://www.microsoft.com/china/msdn/default.mspx

2 当请求到达时,IIS 检查资源类型(就是检查请求文件的扩展名,发现不是自己所能处理的),就调用 ASP.NET ISAPI 扩展。如果启用了默认的进程模型,aspnet_isapi 会将请求排队,并将请求分配给辅助进程。所有的请求数据都通过异步 I/O 发送。如果启用了 IIS 6 进程模型,请求将自动在辅助进程 (w3wp.exe) 中排队,此辅助进程用于处理应用程序所属的 IIS 应用程序池。IIS 6 辅助进程不了解 ASP.NET 和托管代码的任何情况,它只是处理 *.aspx 扩展并加载 aspnet_isapi 模块。当 ASP.NET ISAPI 在 IIS 6 进程模型中运行时,它的工作方式有所不同,仅在 w3wp.exe 辅助进程的上下文中加载 CLR。

3 收到请求后,ASP.NET 辅助进程将通知 ASP.NET ISAPI,它将为请求服务。通知通过同步 I/O 实现。之所以使用同步模型,是因为请求只有在 ISAPI 内部请求表中被标记为“executing”,辅助进程才能开始处理它。如果请求已经由特殊的辅助进程进行处理,则不能再将它指定到其他进程,除非原始进程已取消。

4 完成后,响应被发送到打开了异步管道的 aspnet_isapi。现在,请求的状态变为“Done”,之后将从请求表中被删除。如果辅助进程崩溃,正在处理的所有请求仍将保持“executing”状态并持续一段时间。如果 aspnet_isapi 检测到辅助进程已取消,它将自动终止请求并释放所有相关的 IIS 资源。

5 最后,ISAPI获取了响应(就是经过asp.net运行库所处理后的html内容)后,把响应返回给IIS,IIS将继续处理它的内容,解析所需相关文件,并且把所有的数据发送给客户端。然后关闭连接。


从上面的叙述可以知道,最终要的步骤是Asp.net处理的那一段过程,就是当asp.net的ISAPI启动处理进程后发生了什么事

相关文章:

WebGL初探

目前,我们有很多方案可以快速的接触到 WebGL 并绘制复杂的图形,但最后发现我们忽视了很多细节性的东西。当然,这对初学 WebGL 是有必要的,它能迅速提起我们对 WebGL 的学习兴趣。当学习到更加深入的阶段时,我们更想了解…

Linux下用C语言最基本的程序开发与调试

1.建一个目录2.写代码,建一个hello.c文件代码:view plaincopy to clipboardprint?#include "stdio.h" main() { printf("Hello Linux.\n") } #include "stdio.h" main() { printf("Hello Linux.\n")…

全面升级!星环科技基础软件再升级,赋能数字中国建设

3月24日,星环科技举行2021线上发布会,支持10种主流数据模型的多模数据平台和数据云产品、实现AI建模的全生命周期管理人工智能等产品新版本齐齐亮相。 星环科技坚持核心技术自主原创,专注于大数据基础平台、分布式关系型数据库、数据开发与智…

脚本中echo显示内容带颜色显示

脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e格式如下:echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"例如:echo -e "\033[41;36m something here \033[0m"其中41的位置代表底色&#xf…

Java 8默认方法会破坏你的(用户的)代码

Java 8的默认方法试图尝试更进一步简化Java API。不幸的是,这一最近的语言扩展带来了一系列复杂的规则,但只有少部分Java开发者意识到这一点。这篇文章告诉你为什么引入默认方法会破坏你的(用户的)代码。 起初看来,默认…

JPA多对多关联

关于JPA多对多关系,这是使用学生与教师来表示。一个Student由多个Teacher教,同样一个Teacher也可以教多个学生。Student类如下: 1 package com.yichun.bean;2 3 import java.util.HashSet;4 import java.util.Set;5 6 import javax.persisten…

上市之后,青云存储平台 QingStor 也要“进军”云原生

作者 | 夕颜头图 | 下载于东方IC出品 | CSDN云计算(ID:CSDNcloud)3 月 16 日,北京青云科技股份有限公司(以下简称“青云科技”)登录科创板,昔日里频频出现在公众视野的云计算企业,终…

SQL Server 存储过程的分页方案比拼

建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI…

未来黑客入侵的不仅有电脑,还有人脑?

提到黑客入侵,我们能够知道的领域有很多,比如企业数据库、金融系统、个人信息、个人账户等。随着时代的变迁,人工智能、云计算、物联网等相继崛起,可能给黑客攻击的领域变得越发宽广。可是如果说黑客能攻击控制的不仅仅是电脑&…

不需xp_cmdshell支持在有注入漏洞的SQL服务器上运行CMD命令

我的BLOG里有一篇文章介绍了关于SQL注入的基本原理和一些方法。最让人感兴趣的也许就是前面介绍的利用扩展存储过程xp_cmdshell来运行操作系统的控制台命令。这种方法也非常的简单,只需使用下面的SQL语句:EXEC master.dbo.xp_cmdshell dir c:/但是越来越…

谷歌低调了 5 年的 Fuchsia OS,终于有望面世了!

种种迹象表明,低调了多年的 Fuchsia OS 可能就要出首个开发者版本了!整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)千呼万唤始出来,等待了五年,谷歌 Fuchsia OS 的首个开发者版本终于有望面世了&#…

chrom扩展开发-入门

2019独角兽企业重金招聘Python工程师标准>>> 先了解一下chrome的两种功能延伸方式: * 扩展(Extension) 1.指的是通过调用 Chrome 提供的 Chrome API 来扩展浏览器功能的一种组件,工作在浏览器层面,使用 HT…

你的机器学习模型为什么会出错?奉上四大原因解析及五条改进措施

对开发者来说,目前有一系列的机器学习模型可供选择。雷锋网(公众号:雷锋网)了解,可以用线性回归模型预测具体的数值,用逻辑回归模型对不同的运算结果进行归类,以及用神经网络模型处理非线性的问题等等。 不论哪一种&am…

释放CPU,算力经济下DPU芯片的发展机遇

当前承载算力的基础设施是各种规模的的数据中心,从几十个服务器节点的小规模企业级计算中心到数万个节点的巨型数据中心,通过云计算的模式对应用层客户提供存储、软件、计算平台等服务。这个生态直接承载了全球数十万亿美元规模的数字经济,而…

SQLserver安全设置攻略

日前SQL INJECTION的攻击测试愈演愈烈,很多大型的网站和论坛都相继被注入。这些网站一般使用的多为SQLSERVER数据库,正因为如此,很多人开始怀疑SQL SERVER的安全性。其实SQL SERVER2000已经通过了美国政府的C2级安全认证-这是该行业所能拥有的…

undefined symbol: ap_log_rerror;apache2.4与weblogic点so文件

没法子啊;只能用 httpd-2.2.26 https://www.google.com.hk/#newwindow1&qundefinedsymbol:ap_log_rerror&safestrictundefined symbol: ap_log_rerror[rootlocalhost local]# vi apache2/conf/httpd.conf[rootlocalhost local]# ./apache2/bin/apachectl s…

10个Java 8 Lambda表达式经典示例

Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动。特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里。在Java 8之前,如果想将行为传入函数&…

Sql server 2005带来的分页便利

select threadid from (select threadid, ROW_NUMBER() OVER (order by stickydate) as Pos from cs_threads) as T where T.Pos > 100000 and T.Pos < 100030 如果里面的这个表cs_threads数据量超大&#xff0c;比如&#xff0c;几亿条记录&#xff0c;那这个方法应该是…

想学Python?快看看这个教程!收藏!

Python入门从哪开始&#xff0c;90%以上的书上都是这样讲的&#xff1a;先介绍 Python 的基本语法规则、list、dict、tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0c;介绍文件等IO操作.... 就这样一点一点往下说。然而这种按部就班的学习方法&#…

Struts1.x系列教程(4):标签库概述与安装

Struts的整个视图层&#xff08;就是MVC模式中的View层&#xff09;是由Struts的定制标签&#xff08;或者称为定制动作&#xff09;和客户端代码(Javascript、HTML等)实现的。这些Struts标签被写在JSP页面中&#xff0c;用于生成客户端代码、进行逻辑判断等工作&#xff0c;使…

绿盟科技与CCF成立“鲲鹏”科研基金 计划发力5大领域资助16个项目

【51CTO.com原创稿件】2017年5月10日&#xff0c;由中国计算机学会(CCF)和北京神州绿盟信息安全科技股份有限公司(以下简称&#xff1a;绿盟科技)主办的2017 CCF-绿盟科技“鲲鹏”科研基金新闻发布会于北京隆重举行。双方共同宣布“鲲鹏”科研基金正式成立&#xff0c;该基金将…

修改SQL SERVER内置存储过程

SQLSERVER估计是为了安装或者其它方面&#xff0c;它内置了一批危险的存储过程。能读到注册表信息&#xff0c;能写入注册表信息&#xff0c;能读磁盘共享信息等等……各位看到这儿&#xff0c;心里可能会在想&#xff0c;我的网站中有其它的代码&#xff0c;又不像查询分析器那…

〖Linux〗使用Qt5.2.0开发Android的NDK应用程序

2013年12月11日&#xff0c;Qt发布了其新的Qt版本&#xff1a;Qt5.2.0&#xff1b; 利用这个新的版本&#xff0c;我们可以很轻松地制作出Android手机的NDK应用程序。 开发环境&#xff1a;Ubuntu13.10 x86_64 下载链接&#xff1a;http://download.qt-project.org/official_re…

基于 OpenCV 的面部关键点检测实战

【 编者按】这篇文章概述了用于构建面部关键点检测模型的技术&#xff0c;这些技术是Udacity的AI Nanodegree程序的一部分。作者 | 小白责编 | 欧阳姝黎概述在Udacity的AIND的最终项目中&#xff0c;目标是创建一个面部关键点检测模型。然后将此模型集成到完整的流水线中&#…

气温上升影响数据中心节能

也许一些公司都是你熟悉的名字。但你可能不知道的是&#xff0c;这样的公司拥有遍布美国的大型数据中心&#xff0c;包括北弗吉尼亚州。数据中心用于存储、备份和通信业务&#xff0c;使用了大量的电力&#xff0c;为IT设备供电&#xff0c;并保持其冷却其数据中心基础设施。 也…

如何将SQL Server表驻留内存和检测

将SQL Server数据表驻留内存是SQL Server提供的一项功能&#xff0c;在一般小型系统的开发过程中估计很少会涉及到。这里整理了相关文档资料&#xff0c;演示如何把SQL Server中一个表的所有数据都放入内存中&#xff0c;实现内存数据库&#xff0c;提高实时性。 1, DBCC PINTA…

C 一样快,Ruby 般丝滑的 Crystal 发布 1.0 版本,你看好吗?

整理 | 寇雪芹 头图 | 下载于视觉中国 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 近日&#xff0c;编程语言 Crystal 发布了 1.0 版本。 Crystal 是一种通用的、面向对象的编程语言&#xff0c;其语法受到 Ruby 语言的启发&#xff0c;具有静态类型检查功能&am…

php in yii framework

为什么80%的码农都做不了架构师&#xff1f;>>> command line php yiic defined(STDIN) or define(STDIN, fopen(php://stdin, r));$_SERVER[argv](2013-12-30 22:44:10) 最近读这本书, 讲使用方法, 每章节各自独立, 配合些源码看(但不要细看, 会干扰进度, 浪费时…

selenium grid2 使用远程机器的浏览器

下载 selenium-server-standalone-3.4.0.jar包在selenium-server-standalone-3.4.0.jar包目录下面执行cmd 命令 java -jar selenium-server-standalone-3.4.0.jar -role hub 启用selenium grid hub&#xff0c; 默认端口 4444注册浏览器客户端&#xff0c;命令行执行&#xff…

Create a restful app with AngularJS/Grails(4)

为什么80%的码农都做不了架构师&#xff1f;>>> #Standalone AngularJS application In the real world applications, it is usually required to integrate the third party APIs into the project. Most of case, the third party service is provided as flexi…