开发者社区> 幕三少> 正文

ASP.NET 运行机制详解

简介: 1.浏览器和服务器的交互原理 通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问的电脑上的一个 WEB服务器软件来接收处理,它会分析接收到的请求信息,从而按照请求信息来找到服务器电脑上的文件,经过处理,最终将生成的内容发回到浏览器。
+关注继续查看

1.浏览器和服务器的交互原理

  1. 通俗描述:我们平时通过浏览器来访问网站,其实就相当于你通过浏览器去访问一台电脑上访问文件一样,只不过浏览器的访问请求是由被访问的电脑上的一个 WEB服务器软件来接收处理,它会分析接收到的请求信息,从而按照请求信息来找到服务器电脑上的文件,经过处理,最终将生成的内容发回到浏览器。
  2. 简单的说就是:由浏览器生成一条“命令”,通过互联网发给另一台电脑的某个软件(服务器软件);服务器软件接收到“命令”,就分析理解这个“命令”,然后按照“命令”找到服务器电脑上的文件,将文件内容发送回浏览器。

image

  1. 通过上图,我们看到了浏览器和服务器交互的简单过程。现在,我们要想想,浏览器和服务器软件到底是神马东东,他们之间又是如何交互信息的呢?
  2. 其实,浏览器和服务器软件,就是两个独立的应用程序(就如qq、office、画图工具一样)。那么两个应用程序之间要交互信息,就牵扯到了应用程序通信的问题。那他俩是使用神马方式通信的呢?
  • 答案是套接字:Socket。至于Socket的具体用法和原理,篇幅问题不在此文中写了,先预留位置在这,下次补上《基于多线程和套接字的简易WebServer软件-没有控件的ASP.NET》。
  • 浏览器和服务器软件通过套接字来发送和接收对方的信息,但现在的关键问题是,他们发送和接收的到底是什么?--- 基于Http协议的报文数据(详见《Http协议介绍---没有控件的ASP.NET》)。
  • 也就是说:浏览器和服务器软件其实就是两个使用Socket进行通信的的两个应用程序:双方都发送按照 Http协议语法规范组织的数据,接收到数据后都按照 Http协议语法规范来解释。

    2.浏览器和IIS(or other webserver)交互机制

上图就是IIS (服务器软件)

1.浏览器和IIS交互过程:
我们都知道,在互联网上确定一台电脑的位置是使用IP寻址,但为什么当我们平时访问网站时直接输入一个域名也能够访问到某个服务器电脑进而由对方的服务器软件发送响应页面数据给我呢?下面我把简单步骤列出:

(1)在浏览器输入网址:www.oumind.com/index.html,浏览器按照Http协议语法 生成请求报文数据。

(2).浏览器检查本机是否保存了www.oumind.com/index.html.域名对应的服务器IP地址。如果没有,则发送请求到所在城市网中最近的DNS服务器(域名解析服务器),它会根据我们发送来的域名查询到该域名对应的服务器IP地址,并发送回浏览器。

(3)浏览器从DNS服务器获得了 www.oumind.com/index.html域名对应的服务器电脑IP,则将 请求报文 通过Socket发送到服务器电脑。(注意:Http协议 规定服务器软件使用的默认端口是80,通俗的说,就是如果浏览器访问一个网站页面,浏览器默认就是将 请求报文 发送到服务器80端口,而服务器负责监听这个端口的软件一般就是服务器软件—比如asp.net用的IIS,java用的Tomcat。)

(4)IIS接收到 请求报文,分析请求报文,从中获取请求的页面路径 /index.html。判断页面的后缀名,如果是静态页面(.html/.jpg/.css/.js等),则直接由IIS软件的组件读取该文件内容,并将内容通过Socket发送回浏览器。

(5)但如果此时请求的是一个动态页面(.aspx/.ashx),IIS自己就处理不了 (因为IIS软件开发出来的时候,ASP.NET程序还不存在呢) 。所以,IIS就去它的 扩展程序映射表 中根据被请求文件后缀名 查看是否有能够处理这种文件的扩展程序。

而我们ASPNET中常用的文件.aspx/.ashx等 对应的处理程序是aspnet_isapi.dll。如下图:

(6)如果IIS根据后缀名找到对应的处理程序,则通过调用此程序来处理浏览器发送来的请求报文。

IIS自身是不能处理像ASPX扩 展名这样的页面,只能直接请求像HTML这样的静态文件,之所以能处理ASPX这样扩展名的页面,是因为IIS有一个ISAPI过滤器,它是一个COM组件。

ASP.NET服务在注册到IIS的时候,就会添加一个Win32的扩展动态库aspnet_isapi.dll。并将扩展可以处理的页面扩展名(如 ASPX)注册到IIS里面。扩展启动后,就根据定义好的方式来处理IIS所不能处理的页面。

当客户端请求一个服务器资源时,这个HTTP请求会被inetinfo.exe进程截获(www服务),然后Check请求资源的类型,并依据资源映射信息(存储在IIS元库中,一种IIS专用的配置数据库)将请求的资源分配给特定的处理程序模块。若请求的是静态资源(img,text,html等)则由IIS处理(IIS在本地Web Server上访问请求的文件),将内容输出到控制台,发出请求的浏览器就能接收到它了。

若需要在服务器端处理的请求,则会被传到已注册的扩展模块 中,aspx请求会被分配给aspnet_isapi.dll,让这个程序开始处理代码,生成标准的HTML代码,然后将这些HTML加入到原有的 HTML中,最后把完整的HTML返回给IIS,IIS再把内容发送到客户浏览器。

ASP.NET FrameWork对请求的处理

上面说到IIS将像ASPX这样的页面分配给aspnet_isapi.dll,接着处理如下:

1、aspnet_isapi.dll则会 通过一个Http PipeLine的管道将这个Http请求发给w3wp.exe(iis 工作者进程,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe),之后asp.net framework就会通过HttpRuntime来处理这个Http请求。

2、HttpRuntime首先会确定处理该请求的类名,HttpRuntime通过公共接口IHttpHandler来调用该类获取被请求资源的类的实例。

3、调用HttpRuntime.ProcessRequest开始处理要发送到浏览器的页面,具体说就是创建一个HttpContext实例,它封装了所有与请求有关的http特有的信息,并初始化一个Write对象用于缓存标记代码。

4、HttpRuntime使用上下文信息查找或新建能处理该请求的WEB应用程序的对象。由HttpApplication Factory负责返回HttpApplication实例。

5、HttpApplication实例会读取web.config中所有HttpModule的配置。

6、HttpApplication对象使用IHttpHandlerFactory类型的实例返回HttpHandler(http处理程序)给HttpRuntime对象。一个页面只是个http处理程序对象。
7、最后由HttpRuntime对象调用IHttpHandler的页面对象的ProcessRequest方法。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
技术关于asp运行环境搭建
技术关于asp运行环境搭建
32 0
ASP.NET CORE下运行CMD命令
ASP.NET CORE下运行CMD命令,用以前的ASP.NET 的命令System.Diagnostics.Process.Start("notepad");这样是可以运行出记事本的, 现在公司的C++大神开发了个EXE,需要放在服务器上,然后当访问服务器上的某个网页的时候就执行这个EXE了。
1715 0
WIN10中运行ASP出错
一个项目用ASP做的,想在WIN中IIS建立网站部署起来,开始怎么弄都不行,运行总是出现那句英文,后来才知道要在IIS中的网站的ASP选项中的调试属性中把发送错误到到浏览器打开,这样才能发现程序报错,报错发现是ODBC读access的程序没有找到,后来发现只要在IIS中把32位应用 程序 打开就行了。
778 0
解决IIS7运行ASP提示错误:An error occurred on the server when processing the URL. Please contact the system administrator
原文:解决IIS7运行ASP提示错误:An error occurred on the server when processing the URL. Please contact the system administrator   ...
1311 0
防asp木马运行
首 页 > 技术支持 防asp木马运行 目前比较流行的ASP木马主要通过三种技术来进行对服务器的相关操作。   一、使用FileSystemObject组件   FileSystemObject可以对文件进行常规操作   可以通过修改注册表,将此组件改名,来防止此类木马的危害。
569 0
sql2008 excel2010 导入/导出Excel---在sql2008中执行语句可以运行,在asp中执行出错
问题描述:在sql2008中执行语句可以运行,在asp中执行出错 解决方法:开启asp中登录sql的用户的权限为sa权限 sqladmin --从Excel文件中,导入数据到SQL数据库中,很简单,直接用下面的语句: /*================================...
950 0
+关注
幕三少
熟悉java
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载