第五章 web服务器

文章目录

  • 各种形状和尺寸的web服务器
  • 最小的Perl web服务器
  • 实际的Web服务器会做些什么
  • 第一步——接受客户端连接
  • 第二步——接收请求报文
  • 第三步——处理请求
  • 第四步——对资源的映射及访问、
  • 第五步——构建响应
  • 第六步——发送响应
  • 第七步——记录日志
  • 总结
  • 参考文献


各种形状和尺寸的web服务器

web服务器可以用来表示Web服务器的软件,也可以用来表示提供web页面的特定设备或计算机。

web服务器实现了http和相关的tcp连接处理。负责管理web服务器提供的资源,以及对web服务器的配置、控制及扩展方面的管理。

web服务器有不同的形式。

  • 通用软件web服务器。如apache。通用软件web服务器都运行在标准的、有网络功能的计算机系统上。
  • web服务器设备。是预先打包好的软硬件解决方案。厂商会在他们选择的计算机平台上预先安装好软件服务器,并将软件配置好。
  • 嵌入式web服务器。是要嵌入到消费类产品(如答应机或家用设备)中去的小型web服务器。

最小的Perl web服务器

实际的Web服务器会做些什么

  • 建立连接。接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭。
  • 接收请求。从网络中读取一条http请求报文。
  • 处理请求。对请求报文进行解释,并采取行动。
  • 访问资源。访问报文中指定的资源。
  • 构建响应。创建带有正确首部的http响应报文。
  • 发送响应。将响应会送给客户端。
  • 记录事务处理过程。将与已完成事务有关的内容记录在一个日志文件中。
    第五章 web服务器_第1张图片
图1

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

  • 处理新连接。当客户端请求一条到web服务器的tcp连接时,web服务器会建立连接。判断连接的另一端是那个客户端,从tcp连接中将IP解析出来。一旦新连接建立起来并被接受,服务器就会将新连接添加到其现存Web服务器连接列表中,做好监视连接上数据传输的准备
  • 客户端主机名识别。有些Web服务器会因为客户端IP地址或主机名是未认证的而关闭连接。可以用反向dns对大部分web服务器进行配置,以便将客户端IP地址转换成客户端主机名。不过,主机名查找可能会花费很长时间。
    通过ident确定客户端用户
    第五章 web服务器_第2张图片
图2

ident在组织内部可以很好地工作,但出于多种原因,在公共因特网上并不能很好地工作,原因包括:

  1. 很多客户端PC没有允许ident识别协议守护进程软件。
  2. ident协议会使http事务处理产生严重的时延。
  3. 很多防火墙不允许ident流量进入。
  4. ident协议不安全,容易被伪造。
  5. ident协议不支持虚拟IP地址
  6. 暴露客户端的用户名还涉及隐私问题。

第二步——接收请求报文

解析请求报文时,web服务器会:

  • 解析请求行,查找请求方法、制定的资源标识符、版本号。
  • 报文首部
  • 读取请求主体

第五章 web服务器_第3张图片

图3

Web服务器需要从网络中读取数据,将部分报文数据临时存储在内存中,知道收到足以进行解析的数据并理解其意义为止。

第三步——处理请求

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

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

web服务器是资源服务器。它负责发送原先创建好的内容(静态资源)以及运行在服务器上的资源生成程序所产生的动态内容。

dcroot,document root。通常web服务器的文件系统中会有一个特殊的文件夹专门用于存放Web内容,我们称为根目录
虚拟托管的docroot。虚拟托管的web服务器会在同一台web服务器上提供多个web站点,每个站点在服务器上都有自己独有的文档根目录。虚拟托管的web服务器会根据URI或host首部的ip地址或主机名来识别正确的文档根目录。

第五章 web服务器_第4张图片

图4

用户的主目录。Web服务器上为人们提供私有的Web站点,通常会吧那些以斜杠和波浪号(/~)开始,后面跟着用户名的URl映射为此用户的私有根目录。私有docroot通常都是用户主目录下的那个名叫public_html的根目录。
第五章 web服务器_第5张图片

图5

目录列表。Web服务器可以接手对目录URL的请求,其路径解析为一个目录。可以配置Web服务器对这个请求的动作。

  • 返回一个错误。
  • 不返回目录,返回一个默认的索引文件。一般为index.html。
  • 扫描页面,返回一个包含目录内容的HTML页面。

动态内容资源的映射。服务器收到一条带有可执行路径组件的URI的请求时,会试着去执行相应服务器目录中的程序。

第五步——构建响应

响应报文中包含:

  • 响应状态码
  • 响应首部
  • 响应主体(可能没有)

如果有响应主体,响应报文通常包括:

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

重定向。web服务器有时会返回重定向而不是成功的报文。响应重定向有3xx说明。Location响应首部包含了内容的新地址或优选地址的URI。

第六步——发送响应

发送响应报文时需要注意持久连接非持久连接

  • 非持久连接。server发送完整个报文之后要关闭自己这一端的连接。
  • 持久连接。连接可能仍保持打开状态,server需要正确地计算content-length首部,不然客户端不知道响应什么时候结束

第七步——记录日志

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

总结

一个http连接会做什么。

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

参考文献

《http权威指南》第5涨

你可能感兴趣的:(Http权威指南)