1、Web服务器有不同的形式:可以在计算机系统上安装并运行通用的软件Web服务器;一台Web服务器设备;或是在少量计算机芯片上实现嵌入式Web服务器。
2、第一步——接收客户端连接
客户端请求一条到Web服务器的TCP连接时,Web服务器会建立连接,判断连接的另一端是哪个客户端,从TCP连接中将IP地址解析出来。
3、第二步——接收请求报文
连接上有数据到达时,Web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来。
单线程的Web服务器以此只处理一个请求,直到其完成为止。可以采用多线程的Web服务器或是复用I/O的服务器。在复用结构中,要同时监视所有连接上的活动。当连接的状态发生变化时,就对那条连接进行少量的处理;处理结束后,将连接返回到开放连接列表中,等待下一次状态变化。可以将多线程和复用I/O结合起来。
4、第三步——处理请求
一旦Web服务器收到了请求,就可以根据方法、资源、首部和可选的主体部分来对请求进行处理。
5、第四步——对资源的映射及访问
Web服务器是资源服务器。它们负责发送预先创建好的内容。通常,Web服务器的文件系统中会有一个特殊的文件夹专门用于存放Web内容,这个文件夹被称为文档的根目录。Web服务器从请求报文中获取URI,并将其附加在文档根目录的后面。服务器要注意,不能让相对URL退到根目录之外,将文件系统的其余部分暴露出来。。
虚拟托管的Web服务器会在同一台Web服务器上提供多个Web站点,每个站点在服务器上都有自己独有的文档根目录。
根目录的另一种常见应用是在Web服务器上为人们提供私有的Web站点。
Web服务器可以接收对目录URL的请求,其路径可以解析为一个目录,而不是文件。大多数Web服务器都会去查找目录中一个名为index.html的文件来代表此目录。如果用户请求目录URI时,没有提供默认的索引文件,而且没有禁止使用目录索引,很多Web服务器都会自动返回一个HTML文件,此文件中会列出那个目录里的文件名,以及每个文件的大小和修改日期,还包括到每个文件的URI连接。
Apache允许用户将URI路径名组件映射为可执行文件目录。服务器收到一条带有可执行路径组件的对URI的请求时,会试着去执行相应服务器目录中的程序。
6、第五步——构建响应
6.1、MIME类型
Web服务器要负责确定响应主体的MIME类型,有很多方法可以将MIME类型与资源关联起来。
Web服务器可用文件的扩展名来说明MIME类型;Apache Web服务器可以扫描每个资源的内容,并将其与一个已知模式表进行匹配,以决定每个文件的MIME类型;可以对Web服务器进行配置,使其不考虑文件的扩展名和内容,强制特定文件或目录内容拥有某个MIME类型;有些Web服务器经过配置,可以以多种文档格式来存储资源,这时可以使其通过与用户的协商来决定使用哪种最好。
7、第六步——发送响应
服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。
8、第七步——记录日志
当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务。