ASP.NET运行机制
1 Http请求

如上图,我们先来真正了解一下什么是http请求,举一个简单的例子,你在浏览的一张网页上点击其中的一个超级链接”Microsoft程序员测试题”,如果这个链接到的地址是 http://www.frontfree.net/view/article_840.html ,那么浏览器会立刻向www.frontfree.net 这个服务器发送一条http请求.但是这个请求中不仅包括 http://www.frontfree.net/view/article_840.html字符串,而且还包括 这个www.frontfree.net/article字符串,这个信息是你的超级链接的参考页地址,或参考页信息,这个信息其实很重要,这个可以用在我们后文中所述的对图片盗链的判断中。当然这也是在http2.0规范中被要求的,其次还有一些其它信息,比如你请求的主机名,经过的路由器,客户端的一些信息等等,所以一个http请求中包括相当多的信息,并不像我们从表面上想到的那样简单.好了,现在我们已经知道了什么是http请求.接下来就是时候讲到ASP.NET的网络应用程序的运行机制了。
2 ASP.NET运行原理概述

如上图,当一个http请求发送过来并被IIS机收到之后,IIS首先通过你请求的页面类型为其加载相应的dll文件,然后在处理过程中将这条请求发送给能够处理这条请求的模块,而在ASP.NET中这个模块就叫做HttpHandler,为什么aspx这样的文件可以被服务器处理,那是因为在服务器端有默认的HttpHandler专门处理aspx文件,IIS再将这条请求发送给能够处理这条请求的模块之前,还需要经过一些HttpModule,这些都是系统默认的Modules,而且在这个http请求传到HttpHandler之前要经过不同的HttpModuls的处理,这就像我们如果要乘坐国际航班飞抵异国他乡的话,在你真正坐上飞机前,要经过购买机场建设费,办理登记手续核实身份,进行行李打包托运,进行安全检察,现在又要进行体温等检察一样,需要经一系列的严格的手续。这样做有什么好处,一是为一些必须的过程,二是为了安全性,三是为了提高效率,四是为了我们能够在更多的环节上进行控制,即增强了我们的控制能力。而上述的都是系统的,怎么能说是我们的对http请求控制能力能,那么我们是否可以建立自己的HttpModule和HttpHandler吗?答案是肯定的。但我们先不要急于做事,让我们再深入研究一下运行机制吧。
3 ASP.NET运行机制

那么上面这张图让我们能够更清楚地看到一个http请求是如何经过服务器的处理的,同时通过这张图我们也可以看出Request是掌管着所有客户端输入的。图中为我们展示了一个http请求有可能经过的四条路线。当你第一次访问这个页面时这个请求首先依次经过HttpModuls和HttpHandler的处理,而在HttpHandler的处理中服务器会为你转到你真正要访问的页面,然后通过ASP Engine来找到这个页面背后的类,并实例化为一个临时对象,再此过程中会触发一系列的事件,其中一部份的事件需要经过对象中的方法处理,之后服务器会将这个处理后页面发移交给Response对象,然后由Response对象将这个页面发送到客户端。这就是第一条路线,而当你在这个页面上进行重新提交一些信息,并继续向服务器发送请求时,因为你的服务器之间的会话已经建立,对于你所在的那个临时对象在服务器中已经建立,所以不用再经过初始化页面的工作,故这第二条路线是按照 HttpModuls,HttpHandler,然后直接与临时对象交互,然后返回的。第三条路线与第二条不同的是在处理请求时如果涉及到需要调用ASP Cache,既ASP 缓存的,而临时对象回将直接从ASP 缓存提取信息并返回.这第四条路线就是当你刷新这个页面的时候,服务器接收到时发现这个请求先前已经处理过了,并将处理结果存储到由一个默认的HttpModule管理的输出缓存中了,那么我们就可以直接从这个缓存提取信息并返回,而无需再重新处理一遍了。

浙公网安备 33010602011771号