http web服务器

web服务器实现

web服务器实现了http和相关的tcp连接处理,负责管理web服务器提供的资源,
以及对web服务器的配置、控制、及扩展方面的管理。
  1. 通用的软件web服务器 有很多种,大多来自三个公司,apache,微软和sun的iplant。
  2. web服务器设备 就是预先包装好的软硬件解决方案,厂商在他们选择的计算机平台上预先安装好软件服务器,并将软件配置好。
  3. 嵌入式web服务器 可以嵌入到电子消费品中去。

实际的web服务器会做什么

  1. 建立连接 如果不希望与这个客户端建立连接,就关闭
  2. 接受请求
  3. 处理请求
  4. 访问资源 访问报文中指定的资源
  5. 构建响应 创建具有正确响应首部的http报文。
  6. 发送响应
  7. 记录事务处理过程

接受客户端连接

客户端请求一条到服务器的tcp连接时,web服务器会建立连接,并将接连添加到现存的web服务器连接列表中去,做好监视连接上的数据。web服务器可以随意的拒绝或者关闭任意一条连接。

客户端主机名识别:web服务器将客户端主机名用于**详细的访问控制和日志记录**。但是请求过来的时候,只有客户端ip,可以通过方向dns来查找主机名,但是可能会很慢。通过ident协议来确定客户端用户。如果客户端支持ident协议,就在tcp端口113上坚挺ident请求。这种方式在因特网上,并不常用。

接受请求报文

解析请求行,获取请求方法,和资源标识符。获取首部。如果有的话,还需要读取请求主体。
  1. 报文内部表示法 有些web服务器使用内部数据结构来存储请求报文。将首部放到一个快速查询表中。
  2. 连接输入输出的处理结构 因为有的请求,会在任意时刻到达,web服务器会不停的观察有无新的web请求。不同的web服务器结构会以不同的方式为请求服务:单线程web服务器,多进程及多线程web服务器,复用的io服务器(异步io),复用的多线程web服务器。

对资源的映射和访问

负责发送预先创建好的内容,或者服务器上程序动态生成内容。
  1. docroot 最简单的资源映射,就是使用uri作为名字访问web服务器文件系统中的文件。web服务器会有一个特殊的文件夹专门存放web内容。称为文档根目录。把请求中的uri放在根目录后面找到对应的资源。
  2. 虚拟托管的docroot 就是一台服务器上提供多个web站点,每个站点在服务器上有自己的独有文档根目录。虚拟托管web服务器根据uri或者host首部的主机名或者ip识别正确的文档根目录。
  3. 用户的主目录docroot web服务器上为人们提供私有的站点,通常把那些一斜杠和波浪线开始/~。私有的docroot通常都是用户主目录下那个名为public_html的目录。
  4. 目录列表 如果客户端请求的是一个目录,而不是一个资源,那么会有以下几种方式处理:返回一个错误;不返回目录,返回一个特殊的默认的索引文件;扫描目录,返回一个包含目录内容的html页面。大多数服务器会去目录下查找index.html文件来代替此目录。这都是可以配置的。
  5. 动态内容资源映射 web服务器还可以将uri映射为动态资源。映射到按需动态生成内容的程序上去。web服务器要能分辨出资源什么时候是动态的,动态内容生成程序位于何处。apache允许用户把uri映射为可执行文件目录。
  6. 访问控制 对特定的资源,进行访问控制

构建响应

  1. 响应实体 mime类型,content-length(不一定需要,如果服务器响应了这次请求之后,就把连接关了就不需要这个,整个流,都属于这个主题),主体的实际内容。
  2. mime类型 web服务器可以使用文件扩展名来说明mime类型。web服务器会为每个资源扫描一个包含了所有扩展名的mime类型文件。 -魔法分类 扫描内容,确定mime。 -显式分类 根据目录 -类型协商
  3. 重定向 适用于以下几种情况:永久删除的资源(301),临时删除的资源(303),url增强(303,307),负责均衡,服务器关联,规范目录名。

发送响应

要注意此次响应发送完之后,是否要关闭连接。

猜你喜欢

转载自blog.csdn.net/liang0000zai/article/details/51353439