上一章 我们总结了浏览器和服务器交互的大概总体过程,想浏览器输入请求网址的域名,浏览器按照HTTP协议封装成请求报文,然后通过DNS解析域名得到IP地址,接着通过socket插座将请求报文传到服务器,服务器处理http请求,生成响应报文返回给浏览器,浏览器拿到请求报文,解析成页面呈现给我们。

  这一章,我们讨论下服务器拿到请求报文,是怎么解析请求报文,然后封装成响应报文发送给浏览器的。

 

  其实,在服务器端,有一个服务器软件在监听我们请求的端口,像asp.net的IIS(IIS 5.0以前,之后是一个http.sys的内核模块来监听,我们在第三个版本中将提到他),Java的Tomcat,IIS接受到请求后,解析要求请的是一个什么类型的文件,我们都知道,我们访问的页面主要分两种情况,一种是静态的,例如:静态的html页面,js文件,图片等等,还有一种是动态的页面,例如:.aspx页面 .ashx页面等。如果请求的是静态文件,那么IIS会直接处理,在本地找到请求的静态文件,然后发送给浏览器。如果是动态文件,如aspx或者ashx等动态文件,IIS会发现自己处理不了这样的文件(因为IIS出现的比较早,有IIS的时候还没有动态网页一说),那么,IIS就会去他的映射表里面去找,实现它接口的那个扩展程序(或者说IIS的那个插件)可以处理这样的动态文件,然后IIS发现有个叫做aspnet_isapi的这样一个扩展程序可以处理处理像.aspx和.ashx这样后缀名的文件(前提是你在IIS的映射表中注册了这个扩展程序,否则IIS发现没有处理这样的文件的扩展程序,将发送404报错页面),那么IIS则把请求交给这个aspnet_isapi来处理。aspnet_isapi将启动CLR(公共语言运行时),负责启动asp.net框架的域,然后将请求交给asp.net框架来处理,框架里面有个一HttpRuntime类的对象,那倒请求后,它负责将请求封装成HttpContext对象,常见Application对象,调用application对象的ProcessRequest方法(HttpContext对象作为参数)处理请求(具体的实现我们将在后面讲解到),最后处理完成后,返回给IIS,IIS在返回给浏览器。

 

  

 

我再将过程分步骤列出:

1)浏览器输入请求网址的域名,浏览器按照HTTP协议封装成请求报文,然后通过DNS解析域名得到IP地址,接着通过socket插座将请求报文传到服务器.2

2)IIS接受到请求后,解析要求请的是一个什么类型的文件,如果请求的是静态文件,那么IIS会直接处理,在本地找到请求的静态文件,然后发送给浏览器。

3)如果是动态文件,如aspx或者ashx等动态文件,IIS会发现自己处理不了这样的文件,那么,IIS就会去他的映射表里面去找,实现它接口的那个扩展程序可以处理这样的动态文件,然后IIS发现有个叫做aspnet_isapi的这样一个扩展程序可以处理处理像.aspx和.ashx这样后缀名的文件,那么IIS则把请求交给这个aspnet_isapi来处理。

4)aspnet_isapi将启动CLR(公共语言运行时),负责启动asp.net框架的域,然后将请求交给asp.net框架来处理,框架里面有个一HttpRuntime类的对象,那倒请求后,它负责将请求封装成HttpContext对象,常见Application对象,调用application对象的ProcessRequest方法(HttpContext对象作为参数)处理请求(具体的实现我们将在后面讲解到),最后处理完成后,返回给IIS,IIS在返回给浏览器。

 

在下一个版本中,将进一步讨论服务器如果处理请求,希望大家给予支持与评价。

  

 

 

 

  

posted on 2013-09-01 12:10  Flx  阅读(635)  评论(4编辑  收藏  举报