web服务器工作过程
1.建立连接
2.接收请求
3.处理请求
4.访问资源
5.构建响应
6.发送响应
7.记录日记
建立连接
客户端请求连接的时候,服务器可根据一定规则进行拒绝等操作,也可以根据客户度那连接的ip进行反向dns解析或ident请求获取客户端用户名,不过因为反向dns消耗时间较多,ident请求也因为有各种问题,所以一般没必要的话是不会获取客户端的用户名。
接受&处理请求
通过请求首部解析字段名,并且自己维护一张列表,将解析的结果以key-value的形式存入其中,直至解析完成并足以理解其意义为止。
事务处理结构
不同结构的web服务器处理事务的方法和效率也不一样。
单线程web服务器:单事务处理,处理完一个再继续处理下一个,但万一事务一多,处理速度过慢就会严重影响效率
多进程/多线程web服务器:一般会为每个事务建一个进程或线程,但事务一多,就容易造成大量的线程或进程建立,严重消耗服务器资源。
复用i/o服务器:监听所有的连接,监听时不会为连接分配进程线程资源,只有当连接发生变化才会进行资源分配并处理。
复用的多线程服务器:上述两种的结合。
资源访问
客户端通过uri来访问特定服务器特定目录的某个资源文件,但万一uri没有指定特定的目录和文件呢。这时候就要全靠docroot的位置指定的,也就是俗称的root。配置了root地址的,在默认情况下就会返回root指定地址的文件。
虚拟托管的docroot
理论上来说,一个服务器只有一个root。但是我们一个服务器可以配置多个站点,看起来就像是访问不同服务器一样(实际同一个服务器)。因此我们可以为多个站点配置不同的docroot目录,这就是我们所说的虚拟托管docroot。
私有用户docroot
万一用户想访问自己私有用户的目录文件呢,当然也可以配置。通常以/~开始,后面跟着用户名的uri。
目录列表
除了上述默认docroot的配置,还可以配置成返回一个错误,返回一个HTML文件,里面包含每个文件的名字和文件的大小以及修改日期。当然一般不这么配置,这样暴露的信息太多了..
构建响应
构建响应的时候要确认MIME类型,好让客户端根据其进行解析。确认MIME类型一般有三个方法:
魔法类型:维护一个列表,对列表中进行匹配。速度虽然比较慢,但是很方便在文件没有标准扩展名的时候。
显示分类:不管那么多,强制特定文件或目录内容拥有某个MIME类型。
类型协商:与客户端讨论哪种MIME类型比较好。
重定向
服务器在某些情况下向客户端说明资源需要重新定位。
网友评论