ASP.NET Web服务器处理Http入站出站请求

Ⅰ、Web服务器的入站请求处理

一、IIS服务器是入站HTTP请求的基本端点。它会一直监听并验证入站的HTTP请求。当客户端想服务器发送一个HTTP Request时,IIS监听进程会进行截获请求。然后根据页面后缀类型不同,调用不同的页面处理程序。比如,对于asp页面会调用asp.dll,对于aspx,会调用ISAPI.dll进行处理。而页面处理在处理过程中会经历两个阶段:HttpModule与HttpHandler..

 

二、HttpModule与 HttpHandler:

ASP.NET Web服务器处理Http入站出站请求

 

从以上这张图可以看出,一个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文件生成页面文件发送给客户。

 

你可能感兴趣的:(asp.net)