web服务器之mongoose:简介

引言
 
在深入Mongoose源码剖析之前,我们应该清楚web服务器是什么?它提供什么服务?怎样提供服务?使用了什么协议?客户端如何唯一标识web服务器的资源?下面我们就抛开Mongoose,来介绍一个web服务的这些通性。
 
web服务器:指驻留于因特网上某种类型计算机的程序(web服务器是什么)。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件发送到该浏览器上(提供什么服务),附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP(使用什么协议)进行信息交流,这就是人们常把它们称为HTTPD服务器的原因。Web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息的基础上运行脚本和程序。
 
本文的主要内容如下:
  • 1、web服务器
  • 2、web服务器怎样提供服务
  • 3、web服务器使用的协议
  • 4、客户端如何唯一标识web服务器的资源
  • 5、当前比较流行的web服务器
1、web服务器
web服务器的主要功能就是传送web页面给clients。这就意味着,传送HTML文档和其他包含在文档中的内容,诸如images、style sheets。client通常是一个web浏览器或web爬虫,使用HTTP发起一个指定资源的请求,web服务器用指定的内容响应请求,或当不能指定请求时返回一个错误消息。请求的资源通常是web服务器的辅助存储器上的一个实际文件,但是这不是必须,取决于web服务器的实现。
虽然web服务器的主要功能是提供内容,但一个完整的HTTP实现还包括接收来自client的内容。这个功能用于提交web表单,包括上载文件。
许多web服务器也支持服务器端脚本,例如,Apache HTTP服务器和PHP。这意味着,web服务器的行为可以写成脚本分离到分散的文件中,然而实际的服务器软件仍然保持不变。通常的,这个功能用于创建HTML文档,相对于返回固定的文档。这分别涉及倒动态和静态内容。前者主要检索或修改数据库中信息,然后后者通常更快和更容易缓存。
web服务器并不总是用在万维网上,也可以嵌入道诸如打印机、路由器、网络摄像机和本地网络中等,这时web服务器可用于系统的监视部分,或设备的管理部分。(这部分我不太明白是怎么实现的~~)
 
2、web服务器怎样提供服务
 
你想过没有,当你在浏览器中看这篇日志的时候,它是如何显示在你的浏览器中的?虽然这个过程很大程度上取决于web服务器,但它们仍有共性。典型的,当用户通过点击一个超链接或在浏览器的地址栏中输入一个URL浏览一个web站点。但是同一个站点如何同时在网络上的不同计算机上显示的呢?
以我的博客的首页为主,当你在浏览器的地址栏中输入http://blog.chinaunix.net/uid/26548237.html时,通过一个Internet连接,通过将域名转换为ip地址,然后定位到CU服务器,你的浏览器初始化一个与CU服务器的连接。web服务器上存储了我的博客中的所有资源,如写的这篇文章、文章中用到的图片、还有博客模板中用到的css、脚本等等。
一旦连接建立,浏览器使用HTTP从web服务器请求数据,服务器传输数据给你的浏览器。浏览器接着转换和格式化数据显示倒你的浏览器中。类似的,web服务器可以同时发送文件到多个client,允许多个client同时浏览同一个网页。
              
                                  图1 web客户端与服务器端的交互
当然,这里描述的比较简单,更详细的步骤请参考:
3、web服务器使用的协议
 
相信通过上面的介绍,你已经知道了web服务器与client是通过HTTP来交互的。关于HTTP,请参考:(http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html),这篇文章比较详细的介绍HTTP及其与client的交互过程,这里就不在累述了。
 
4、客户端如何唯一的标识web服务器的资源
 
URI,没错就是它,统一资源标识符(Uniform Resource Identifiers),用它唯一的标识Internet的一个web页面。不过,你可能听的更多的是URL,它就是Uniform Resource Location的缩写,译为“统一资源定位符”。通俗的说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器地址和目录等。
 
URL的格式,URL的格式由下列三部分组成:
  • 第一部分是协议(或称服务方式)
  • 第二部分是存有所请求资源的主机IP地址(有时也包括端口号)
  • 第三部分是主机资源的具体地址,如目录和文件名等
第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/"符合隔开。第一部分和第二部分是不可缺少的,第三部分可以省略。其实关于://不是必须的,只是万维网当初是这样设计的,请Google or 百度《万维网之父说http://中的两道斜杠其实多余》。完整的URL的格式如下所示:
 
scheme://username:password@domain:port/path?query_string#anchor
scheme就是上面我们所说的协议部分,web服务器中通常用的就是HTTP和HTTPS,但它还可以是gopher、wais、ftp、mailto。
usename:password@domain:port就是我们上面说的第二部分,一般我们都不用输入用户名和密码、还有端口(http协议的端口号是80,一般默认都用这个),而只是直接输入域名或者ip地址。path?query_string#anchor就是我们说的第三部分,path指定资源在服务器上的路径(注意,不一定是web服务器上的绝对路径,而是经过URL重写之后的路径,但不管怎么说,它还是唯一标识了资源在服务器上的路径);后面的query_string包含传递个web应用程序(如CGI)的数据。查询字符串以键/值对的形式,并且每个键值对之间用&隔开,如useId=aa&password=13;最后当使用HTTP,#anchor表示web页面的某一个部分。
上面说到URI和URL,肯定还有人不知道它们的区别,下面解释下。URI:统一资源标识符;URL:统一资源定位符;URN:统一资源名称。其中,URL、URN是URI的子集。它们的关系如下图所示:
                                                                             
Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式:URL、URN。二者好比,URN就像一个人的名字,然后URL就像这个人所在的位置地址。换句话说,URN定义了一个元素的标识符,URL提供方法找到它。即URN不依赖于位置,并且有可能减少失效连接的个数。
 
5、当今比较流行的几款web服务器

 

 

下面是目前比较流行的几个web服务器软件:Apache、IIS、nginx、lighttpd等等。

而今天所研究的web服务器软件不再其中,之所以选Mongoose来研究,原因有三:

 

 

 

  • Mongoose比较小巧,容易使用,而且能够嵌入到现有的应用程序中;
  • 麻雀虽小,五脏俱全!Mongoose虽小巧,它具有基本的web服务器应该有的功能。通过研究它,可以更快地学习倒web服务器软件的特性和实现细节;
  • Mongoose是开源的,可以自由使用;
posted @ 2017-09-05 15:06  苍月代表我  阅读(783)  评论(0编辑  收藏  举报