在请求报文读取完成后,进入请求处理阶段,请求处理阶段包括三个大的阶段:请求解析阶段、安全处理阶段、请求准备阶段,每一个大的阶段又可以分成很多少的阶段。
请求解析阶段
1.URL字符转义
通常情况下,游览器会自动转换请求地址中的一些特殊字符,如空格为%20,而在服务器上得把这些%XX转换回来,整个URL的转义函数为ap_unescape_url
2.从URL中删除/../和/./字符
URL中所有的/../和/./字符都在这一阶段调用ap_getparents()函数并被删除,该阶段确保提交给后续阶段的时候是一个绝对的路径。
3.首次读取URL相关配置信息
完成ap_getparents()后将调用ap_location_walk从配置系统中查找与该URL相关的配置信息,在请求处理的后续如用户授权等都在依赖该配置信息。
4、URL名称转换(translate_name)
该阶段主要用于对URL进行转换。比如Alias指令用于将某个URL映射到另外一个URL中,而mod_write模块则用于对URl的完全重写,另外,比如代理请求会在请求URL前加上proxy://如果某个模块需要对URL进行修改,那么都 可以在这一阶段完成。
5、map_to_storage
如果在translate_name阶段,请求的URL最终转换本次的磁盘路径,map_to_storage将用来确定特定的资源是否在磁盘上存在,使用这个挂钩的原因在于如果所提供的数据不是动态生成的,而是位于磁盘上的文件,那么服务器可能要执行更严格的安全检查。
6、二次URL相关配置文件的读取
在进行了名称转换和映射后,原先的http://www.xxx.com可能被映射到www.yyy.com,此时还在针动新的URl再次读取其配置信息。
7、heal_parser
该阶段用来检查http请求头。
安全处理阶段
1.access_checker
该阶段主要对访问做一些基础性的限制工作,比如mod_access模块可以对IP限制。
2、check_usr_id
该阶段主要是检查用户的身份权限,具体就是检查用户是否存在,或者密码。
3、auth_checker
尽管用户可以通过了身份认证,但是,如果要访问一些私密文件,那么也会对其进行限制。该阶段主要是检查权限。
请求准备阶段
1、type_checker
在权限检查完成后,说明可以响应客户的请示了,这时,Apache开始处理客户请求的资源,客户端的信息可能是多种多样,这就要求服务器能处理各种请求,比如:HTML、文本、图片等。
2、fixups
这是处理请求的最后一个阶段,该阶段后生成的内客就返回给客户端,如果你希望在生成之前再做点什么,就可以放在该阶段完成。