文章目录
各种形状和尺寸的web服务器
web服务器可以用来表示Web服务器的软件,也可以用来表示提供web页面的特定设备或计算机。
web服务器实现了http和相关的tcp连接处理。负责管理web服务器提供的资源,以及对web服务器的配置、控制及扩展方面的管理。
web服务器有不同的形式。
- 通用软件web服务器。如apache。通用软件web服务器都运行在标准的、有网络功能的计算机系统上。
- web服务器设备。是预先打包好的软硬件解决方案。厂商会在他们选择的计算机平台上预先安装好软件服务器,并将软件配置好。
- 嵌入式web服务器。是要嵌入到消费类产品(如答应机或家用设备)中去的小型web服务器。
最小的Perl web服务器
实际的Web服务器会做些什么
- 建立连接。接受一个客户端连接,或者如果不希望与这个客户端建立连接,就将其关闭。
- 接收请求。从网络中读取一条http请求报文。
- 处理请求。对请求报文进行解释,并采取行动。
- 访问资源。访问报文中指定的资源。
- 构建响应。创建带有正确首部的http响应报文。
- 发送响应。将响应会送给客户端。
- 记录事务处理过程。将与已完成事务有关的内容记录在一个日志文件中。
第一步——接受客户端连接
- 处理新连接。当客户端请求一条到web服务器的tcp连接时,web服务器会建立连接。判断连接的另一端是那个客户端,从tcp连接中将IP解析出来。一旦新连接建立起来并被接受,服务器就会将新连接添加到其现存Web服务器连接列表中,做好监视连接上数据传输的准备。
- 客户端主机名识别。有些Web服务器会因为客户端IP地址或主机名是未认证的而关闭连接。可以用反向dns对大部分web服务器进行配置,以便将客户端IP地址转换成客户端主机名。不过,主机名查找可能会花费很长时间。
通过ident确定客户端用户。
ident在组织内部可以很好地工作,但出于多种原因,在公共因特网上并不能很好地工作,原因包括:
- 很多客户端PC没有允许ident识别协议守护进程软件。
- ident协议会使http事务处理产生严重的时延。
- 很多防火墙不允许ident流量进入。
- ident协议不安全,容易被伪造。
- ident协议不支持虚拟IP地址
- 暴露客户端的用户名还涉及隐私问题。
第二步——接收请求报文
解析请求报文时,web服务器会:
- 解析请求行,查找请求方法、制定的资源标识符、版本号。
- 报文首部
- 读取请求主体
Web服务器需要从网络中读取数据,将部分报文数据临时存储在内存中,知道收到足以进行解析的数据并理解其意义为止。
第三步——处理请求
一旦web服务器收到了请求,就可以根据方法、资源、首部和可选的主体部分来对资源进行处理了。
第四步——对资源的映射及访问、
web服务器是资源服务器。它负责发送原先创建好的内容(静态资源)以及运行在服务器上的资源生成程序所产生的动态内容。
dcroot,document root。通常web服务器的文件系统中会有一个特殊的文件夹专门用于存放Web内容,我们称为根目录。
虚拟托管的docroot。虚拟托管的web服务器会在同一台web服务器上提供多个web站点,每个站点在服务器上都有自己独有的文档根目录。虚拟托管的web服务器会根据URI或host
首部的ip地址或主机名来识别正确的文档根目录。
用户的主目录。Web服务器上为人们提供私有的Web站点,通常会吧那些以斜杠和波浪号(/~)开始,后面跟着用户名的URl映射为此用户的私有根目录。私有docroot通常都是用户主目录下的那个名叫public_html
的根目录。
目录列表。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涨