Web服务器会做些什么

不管是在日常的开发、发布Web程序还是浏览网页,我们都离不开Web服务器。《Http权威指南》的5.3节介绍了Web服务器会做些什么,特意做了此读书笔记。

如下图所示:

基本Web服务器请求的步骤
  1. 建立连接——接受客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭。
  2. 接收请求——从网络中读取一条HTTP请求报文。
  3. 处理请求——对请求报文进行解释,并采取行动。
  4. 访问资源——访问报文中指定的资源。
  5. 构建响应——创建带有正确首部的HTTP响应报文。
  6. 发送响应——将响应发送给客户端。
  7. 记录事务处理过程——将与已完成事务有关的内容记录在一个日志文件中。

第一步——接受客户端连接

如果客户端已经打开一条道服务器的持久连接,可以使用那条连接来发送它的请求。否则,客户端需要打开一条新的到服务器的连接。

服务器处理新连接流程:
客户端请求TCP连接 –> Web服务器建立连接 –> 服务器判断是哪一个客户端,从TCP连接中解析出IP地址 –> 服务器将新连接添加到Web服务器连接列表中,监视连接上的数据传输

Web服务器可以随意拒绝或者立即关闭任意一条连接。

可以使用“反向DNS”对大部分Web服务器进行配置,以便将客户端IP地址转换成客户端主机名。(这样会降低Web事务处理的速度)

第二步——接收请求报文

连接上有数据到达时,Web服务器会从网络连接中读取数据,并将请求报文中的内容解析出来。

不同的Web服务器结构会以不同的方式为请求服务:

  • 单线程Web服务器:一次只能处理一个请求,直到其完成为止。一个事务处理结束之后,才去处理下一条连接。
  • 多线程及多线程Web服务器:用多个进程,或更高效的线程同时对请求进行处理。
  • 复用I/O的服务器:监控连接上所有的活动,当连接状态变化时进行处理;处理结束后,将连接返回到开发列表中。
  • 复用的多线程Web服务器:将复用功能和多线程结合在一起。

第三步——处理请求

Web服务器收到了请求,就可以根据方法、资源、首部和可选的主体部分来对请求进行处理了。

第四步——对资源的映射及访问

Web服务器是资源服务器。它们负责发送预先创建好的内容,以及运行在服务器上的资源生成程序所生产的动态内容。

Web服务器的文件系统中会有一个特殊的文件夹专门存放Web内容,叫文档的根目录(document root,docroot)。

第五步——构建响应

一旦Web服务器识别出了资源,就执行请求方法中描述的动作,并返回响应报文。

如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。如果有响应主体的话,响应报文中通常包括:

  • 描述了响应主体MIME类型的Content-Type首部;
  • 描述了响应主体长度的Content-Length首部;
  • 实际报文的主体内容。

Web服务器有时会返回重定向响应而不是成功的报文。重定向可用于下列情况:

  • 永久搬离的资源
  • 临时搬离的资源
  • URL增强
  • 负载均衡
  • 服务器关联
  • 规范目录名称

第六步——发送响应

服务器有很多条到各个客户端的连接,有些空闲,有些在向服务器发送数据,有些在向客户端回送响应数据。服务器要记录连接的状态。

第七步——记录日志

事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务。