Ⅰ、Web服务器的入站请求处理
一、IIS服务器是入站HTTP请求的基本端点。它会一直监听并验证入站的HTTP请求。当客户端想服务器发送一个HTTP Request时,IIS监听进程会进行截获请求。然后根据页面后缀类型不同,调用不同的页面处理程序。比如,对于asp页面会调用asp.dll,对于aspx,会调用ISAPI.dll进行处理。而页面处理在处理过程中会经历两个阶段:HttpModule与HttpHandler..
二、HttpModule与 HttpHandler:
从以上这张图可以看出,一个Http请求是需要经过HttpModule与HttpHandler两层处理的。
而HttpModule与HttpHandler都可以看作一个容器。
IIS服务器会一直监听和验证入站的HTTP去请求。当客户端将服务器发送一个HTTP请求时,HTTP请求首先会最先经过HttpModule进行处理,并且此时,服务器尚未对Http请求做任何处理。我们就可以在HTTP请求传递至HttpHandler处理前,对HTTP请求进行一定的处理。比如附加信息,截获信息进行加工处理,或者直接终止信息。
而后HttpModule会将HTTP请求传递至HttpHandler Factory,HttpHandler Factory会提供一个HttpHandler容器,用于对HTTP请求的真正处理。紧接着HttpMoudle会连续响应AcquireRequestState事件和PreRequestHandlerExcute事件。响应事件之后才是HttpHandler对HTTP请求的真正处理。此时HttpModule会将对HTTP的控制权暂时交给容器HttpHandler。HttpHandler会调用Process.Request()方法对HTTP请求进行处理,HttpHandler处理完毕后,再将控制权交还给HttpModule。HttpModule对处理完毕的HTTP请求进行层层转交,最后返回给客户端。
三、总之,HttpMoudle是在Http Request页面处理前和处理后进行处理。不影响页面的处理结果,而实际上对一个HTTP请求进行真正处理的是HttpHandler。HttpHandler也称为一般处理程序。默认扩展名为 .ashx。
Ⅱ、阐述HttpMoudle 与 HttpHandler:
一、HttpMoudle:泛指实现了IHttpMoudle接口和处理事件的程序集。
二、HttpHandler:泛指实现了IHttpHandler接口的所有页面类型。包括aspx,ashx,和其他自定义类型。
IHttpHandler按照请求生成响应的内容,通常是为一类请求产生响应结果(可以是aspx请求,html或jpg等请求),而IHttpMoudle对请求进行预处理,包括修改,验证,过滤等。
Ⅲ、.aspx页面与 .axhx页面与 .aspx.cs页面的关系:
一、.aspx与.ashx页面的联系:
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
//ProcssRequest方法用于处理入站的HTTP请求。默认情况下,内容类型为纯文本
{
context.Response.ContentType = "text/plain";
//ContentType告诉客户端响应的数据类型。
//客户端根据返回的数据类型进行不同的处理
//如将ContentType改为"text/html"客户端就会对HTML进行解析显示
//ContentType为"text/plain" 客户端会对文本进行直接显示
//此外还有 image/jpeg、text/javascript等
context.Response.Write("Hello World");
}
}
public bool IsReusable
//IsReusable属性告诉ASP.NET入站的HTTP请求是否可重用这个HttpHandle的实例
{
get
{
return false;
}
}
}由新建的HtttpHandler可以看出,HtttpHandler是实现了IHtttpHandler接口的。
namespace WebForm
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
//////////////////////////////////////////////////////////////////////
//转至Page定义:
public class Page : TemplateControl, IHttpHandler
而WebForm的父类,Page类也是实现了IHttpHandler接口的。所以我们的WebForm,aspx页面可以看成是一种特殊的HttpHandler,一种特殊的处理程序。
二、.aspx与.axpx.cs页面之间的联系:
1、.aspx与cs页面是一种Code-Behind的格式。即前台设计页面,后台功能代码,分隔开可以使逻辑清晰化,功能模块化。
2、当Http Request到来时,HttpMoudle对Request进行预处理后交给HttpHandler Factory。HttpHandler Factory 会解析aspx 文件生成动态代码。将动态代码与aspx.cs中的一个类(此为一个基类、例如为WebForm),编译生成一个新类Class1。存放在ASP.NET缓存中。而<% %>会在运行时生成一个新类Class2,继承于前边的类Class1.
最后结合aspx中的html文件生成页面文件发送给客户。