声明:本网站开发快速入门教程系列为刘兴(http://deepfuture.iteye.com/)整理,如果转载请注明转载来源
========================================================
WEB服务器原理
您是否曾经对将此网页传送给您的机制感到好奇?假设此刻您正坐在计算机前在浏览器中查看这个网页。在您单击这个网页的链接或键入它的统一资源定位符(URL)时,屏幕后究竟执行了什么-样的过程才把这个网页传送到您的屏幕上的?
如果您曾经对这个过程感到好奇,或者希望知道您之所以能在网上冲浪的一些特定机制,那就请继续阅读。在本文中,您将了解Web服务器是如何把网页传送到您家、您的学校或办公室的。让我们开始吧!
假设您正坐在计算机前上网,这时接到朋友的电话说:“我刚刚读了一篇精彩的文章!请键入这个URL查看一下。网址是 http://www.howstuffworks.com/Web-server.htm。”于是您将该URL键入您的浏览器并按下回车键。神奇的是,无论这个URL位于世界的哪个角落,该网页都会出现在您的屏幕上。
以下示意图尽可能浅显地显示了将网页传送到屏幕上的步骤:
? |
您的浏览器建立了与Web服务器的连接,请求一个网页并收到了该网页。
在下一页中,我们将更深入地探讨。
如果您希望更详细地了解将网页传送到计算机屏幕上的过程,下面就是幕后发生的基本步骤:
? 浏览器将URL分解为三个部分:
1.? 协议(“http”)
2.? 服务器名(“www.howstuffworks.com”)
3.? 文件名(“Web-server.htm”)
? 浏览器与名称服务器通信,将服务器名“www.howstuffworks.com”转换成IP地址,服务器使用该地址连接到服务器计算机。
? 之后,浏览器以该IP地址在端口80上建立与服务器的连接。(我们将在本文的稍后部分讨论端口。)
? 浏览器按照HTTP协议向服务器发送GET请求,请求“http://www.howstuffworks.com/Web-server.htm.”文件(请注意,使用GET请求时,可能会从浏览器向服务器发送Cookie,有关详细信息,请参见网络Cookie工作原理。)
? 之后,服务器会将该网页的HTML文本发送到浏览器。(Cookie也可能通过网页的标头从服务器发送到浏览器。)
? 浏览器读取HTML标记并设置网页的格式,最后显示在屏幕上。
如果您以前从来没有研究过这个过程,那么您将会遇到很多新词汇。要详细理解整个过程,您需要学习有关IP地址、端口、协议等内容。后面的章节将为您提供完整的说明。
那么什么是“互联网”?互联网是由千百万台计算机组成的庞大集合,所有的计算机都在计算机网络上链接在一起。该网络能让所有的计算机互相通信。家庭计算机可以使用能与互联网服务提供商(ISP)通信的电话线调制解调器、DSL或电缆调制解调器与互联网链接。企业或大学里的计算机通常有网络接口卡(NIC),可以将该计算机连接到企业内的局域网(LAN)。之后,企业可以使用如T1线路这样的高速电话线路将其LAN连接到ISP。T1线路每秒钟可以处理大约150万比特的数据,而使用调制解调器的普通电话线路通常每秒钟可以处理3至5万比特的数据。
ISP之后再与更大的ISP连接,而最大的ISP维护整个国家或地区的光纤“构架”。世界各地的构架通过光纤、海底电缆或卫星链接而连接起来。这样,互联网上的每台计算机就可以与互联网上的每台其他计算机连接起来。
? |
一般说来,互联网上的所有计算机可以分成两种类型:服务器和客户端。向其他计算机提供服务(如Web服务器或FTP服务器)的计算机是服务器。而连接到服务器上获取服务的计算机称为客户端。当您连接到雅虎阅读一个网页时,雅虎将提供一台计算机(很可能是很大的计算机群集)在互联网上使用,以便为您的请求提供服务。而雅虎提供的这台计算机就是服务器。另一方面,您的计算机有可能没向互联网上的其他人提供任何服务。因此,它是一台用户计算机,也称为客户端。一台计算机既是服务器也是客户端的情况是可能的,也是常见的,但出于本文的目的,您可以姑且认为大多数计算机不是服务器就是计算机。
服务器计算机可以在互联网上提供一种或多种服务。例如,服务器计算机上运行的软件可以使该服务器计算机成为Web服务器、电子邮件服务器和FTP服务器。带着特定目的访问服务器计算机的客户端也是如此,因此,客户端会将其请求定向到总体服务器计算机上运行的特定软件服务器。例如,如果您正在计算机上运行Web浏览器,那么您的计算机很可能是要与服务器计算机上的Web服务器通信。您的Telnet应用程序将要与Telnet服务器通信,您的电子邮件应用程序将要与电子邮件服务器通信,如此等等。
为了能直接找到这些计算机,互联网上的每台计算机均指定有一个唯一的地址,称为IP地址。IP代表互联网协议,这些地址都是32位数字,通常用4个由带小数点的十进制数字组成的“八位字节”来表示。典型的IP地址如下所示:
IP地址中的4个数字称为八位字节,这是因为它们可能是从0到255之间的值,即每个八位字节有28种可能性。
互联网上的每台计算机都有一个唯一的IP地址。服务器具有静态IP地址,不会经常变化。通过调制解调器拨号连接的家庭计算机的IP地址通常是在该计算机拨入时由ISP指定的。该IP地址对于该次会话是唯一的,但是在该计算机下次拨入时,这个地址可能会不同。这样,ISP就只需为每个支持的调制解调器分配一个IP地址,而不是为每个客户都分配一个IP地址。
如果您使用的是Windows计算机,则可以通过WINIPCFG.EXE(对于Windows 2000/XP则是IPCONFIG.EXE)命令查看有关计算机的大量互联网信息,包括您当前的IP地址和主机名。在UNIX计算机上,在命令提示符下键入nslookup和类似www.howstuffworks.com这样的计算机名(例如“nslookup www.howstuffworks.com”)即可显示该计算机的IP地址。您也可以使用hostname命令来了解您的计算机的名称。(有关IP地址的更多信息,请参见IANA。)
至于互联网上的计算机,要与服务器通信,只要有IP地址就够了。在某些服务器上,仅有IP地址是不够的,但多数大型服务器均是如此――请继续阅读以了解详细信息。
????????? 216.27.61.137
因为大多数人很难记住组成IP地址的一大串数字,又因为IP地址有时需要更改,所以互联网上所有的服务器还有易读的名称,称为域名。例如,www.howstuffworks.com就是一个永久性的易读名称。对我们中的大多数人来说,记忆www.howstuffworks.com要比记忆209.116.69.66更容易。
www.howstuffworks.com这个名称实际上分为3部分:
1.? 主机名(“www”)
2.? 域名(“howstuffworks”)
3.? 顶级域名(“com”)
在“.com”域内的域名由名为VeriSign的注册公司管理。VeriSign也管理“.net”域名。其他的注册器(如RegistryPro、NeuLevel和Public Interest Registry)则管理其他的域(如.pro、.biz和.org)VeriSign创建顶级域名并保证在一个顶级域内的所有域名都是唯一的。VeriSign还维护每个网站的联系信息并运行“whois”数据库。主机名是由托管该域的公司创建的。“www”是很常见的主机名,但是现在很多地方将其省略,或者用一个指示该网站特定领域的不同的主机名来取代。例如在encarta.msn.com中,将Microsoft的Encarta电子百科全书的域名“encarta”指定为主机名以取代“www”。 一组称为域名服务器(DNS)的服务器可以将易读的域名映射到IP地址。这些服务器是可以将域名映射到IP地址的简单数据库,它们分布在互联网上的各个地方。多数单独的公司、ISP和大学均维护小型的名称服务器,以将主机名映射到IP地址。还有中央名称服务器,它们使用VeriSign提供的数据将域名映射到IP地址。
如果您将URL“http://www.howstuffworks.com/Web-server.htm”键入到浏览器中,浏览器会提取名称“www.howstuffworks.com”并将其传递给域名服务器,域名服务器将返回www.howstuffworks.com的正确IP地址。要得到正确的IP地址,可能需要使用多个名称服务器。例如,在www.howstuffworks.com的例子中,用于“.com”顶级域的名称服务器能够辨别知道主机名的名称服务器的IP地址,而由HowStuffWorks ISP操作的、对该名称服务器的查询,则可以为HowStuffWorks服务器计算机提供实际的IP地址。
在UNIX计算机上,您可以使用nslookup命令来访问同样的服务。只要在命令行中键入一个名称,如“www.howstuffworks.com”,该命令即会查询名称服务器并向您提供相应的IP地址。
因此归结如下:互联网由无数台计算机组成,每台计算机各自具有唯一的IP地址。这些计算机中有许多是服务器计算机,也就是说它们能向互联网上的其他计算机提供服务。您可能已经听说过这些服务器:电子邮件服务器、Web服务器、FTP服务器、Gopher服务器和Telnet服务器等,这里仅举几个例子。所有这些都是由服务器计算机提供的。
任何服务器计算机都使用编号的端口向互联网提供其服务,服务器上可用的每项服务对应于一个端口。例如,如果一台服务器计算机同时运行Web服务器和FTP服务器,则Web服务器通常位于端口80上,而 FTP 服务器位于端口21上。客户端使用特定的IP地址和特定的端口来连接服务。
人们熟知的每项服务都在一个为人熟知的端口号上提供。下面是一些常用的端口号:
? echo 7
? daytime 13
? qotd 17(日期的引用)
? ftp 21
? telnet 23
? smtp 25(简单邮件传送,即电子邮件)
? time 37
? nameserver 53
? nicname 43 (Who Is)
? gopher 70
? finger 79
? WWW 80
如果服务器计算机在一个端口上接受来自外部世界的连接,并且防火墙未保护此端口,那么您可以从互联网上的任何地方连接到此端口并使用此项服务。请注意,这里并未强制Web服务器必须使用端口80。如果您要设置自己的计算机并在其上加载Web服务器软件,那么您也可以将Web服务器放在端口918上,如果需要,您还可以将它放在任何其他未使用的端口上。之后,如果您的计算机名为xxx.yyy.com,互联网上的其他人可以使用http://xxx.yyy.com:918这个URL连接到您的服务器上。“:918”显式指定了端口号,其他人如果要访问您的服务器,就必须将它包括在URL内。如果没有指定端口号,则浏览器将将假定服务器使用的是人们熟知的端口80。
客户端与某个端口的服务程序连接以后,会使用一个特定协议获得服务。协议是想要使用某一服务的某一方与该服务之间进行通信的一种预定义方式。“某一方”可能是一个人,但在更多的情况下,它是一个计算机程序,例如Web浏览器。协议通常是文本,简单说明客户端和服务器进行会话的方式。
也许最简单的协议是日期时间协议。如果您在一台支持日期时间服务器的计算机上连接到端口13,该服务器将为您发送它的当前日期和时间,然后关闭连接。协议是“如果你连接到我,我将为你发送日期和时间,然后断开连接”。大多数UNIX计算机都支持此服务器。如果您想尝试一下,可以用Telnet应用程序连接到此服务器。在UNIX中,会话过程如下所示:
%telnet Web67.ntx.net 13
Trying 216.27.61.137...(正在尝试 216.27.61.137...)
Connected to Web67.ntx.net.(已连接到 Web67.ntx.net。)
Escape character is '^]'.(转义字符为“^]”。)
Sun Oct 25 08:34:06 1998(1998年10月25日星期日 08:34:06)
Connection closed by foreign host.(连接已被外部主机关闭。)
在Windows计算机上,您可以通过在MSDOS提示符下键入“telnet Web67.ntx.net 13”来访问此服务器。
在本示例中,Web67.ntx.net是该服务器的UNIX计算机,13是日期时间服务的端口号。Telnet应用程序连接到端口13(telnet会自然连接到端口23,但您可以将其定向为连接到任何端口),之后,服务器会发送日期和时间并断开连接。Telnet的大多数版本均允许您指定端口号,所以您可以使用您的计算机上可用的任何版本的Telnet来尝试。
大多数协议涉及的内容并不仅限于日期时间,并在公开可用的“征求意见(RFC)文档中进行指定(有关所有RFC的完整存档,请访问http://sunsite.auc.dk/RFC/)。互联网上的每个Web服务器都遵循HTTP协议,该协议在1991年定义的原始HTTP中进行了精辟的总结。HTTP服务器可以理解的最基本的协议形式只包括一个命令:GET。如果您连接到一个能理解HTTP协议的服务器并让它“GET文件名”,该服务器将做出相应的反应,为您发送指定文件的内容,然后断开连接。下面是一个典型的会话:
%telnet www.howstuffworks.com 80
Trying 216.27.61.137...(正在尝试 216.27.61.137...)
Connected to howstuffworks.com.(已连接到 howstuffworks.com。)
Escape character is '^]'.(转义字符为“^]”。)
GET http://www.howstuffworks.com/
??? ()
? ...
Connection closed by foreign host.(连接已被外部主机关闭。)
在原始HTTP协议中,您所要发送的只是实际文件名,比如“/”或“/Web-server.htm”。经过后来的修改后,它可以发送完整的URL。这使得托管虚拟域(许多域存在于单一的计算机上)的公司可以为他们托管的所有的域使用一个IP地址。其结果是数百个域都托管在209.116.69.66上,而这正是HowStuffWorks的IP地址。
现在您对互联网已经有了相当的了解。您知道在将一个URL键入浏览器时,会发生以下步骤:
?????? 浏览器将URL分解为三个部分:
1.? 协议(“http”)
2.? 服务器名(“www.howstuffworks.com”)
3.? 文件名(“Web-server.htm”)
?????? 浏览器与名称服务器通信,将服务器名“www.howstuffworks.com”转换成IP地址,服务器使用该地址连接到服务器计算机。
?????? 之后,浏览器以该IP地址在端口80上建立与Web服务器的连接。
?????? 浏览器按照HTTP协议向服务器发送GET请求,请求“http://www.howstuffworks.com/Web-server.htm”文件(请注意,使用GET请求时,可能会从浏览器向服务器发送Cookie,有关详细信息,请参见网络Cookie工作原理。)
?????? 服务器会将该网页的HTML文本发送到浏览器。(Cookie也可能通过网页的标头从服务器发送到浏览器。)
?????? 浏览器读取HTML标记并设置网页的格式,最后显示在屏幕上。
?????? 从上面的说明中您可以看出,Web服务器可以是一种相当简单的软件。它获取由GET命令传入的文件名,检索该文件并沿着线路将该文件发送到浏览器。如果您考虑了处理端口和端口连接的所有代码,您就可以轻松地创建一个C程序,用不到500行代码来实现一个简单的Web服务器。当然,一个完备的企业级Web服务器要更复杂些,但其基本原理非常简单。
?????? 多数服务器都会向服务进程中添加一定的安全措施。例如,如果您曾访问过某个网页,该网页使浏览器弹出一个对话框,要求您填写姓名和密码,这意味着您遇到的是受密码保护的网页。服务器让该网页的所有者维护一份允许访问该网页的人的姓名和密码的列表;服务器只让知道正确密码的人查看该网页。更为高级的服务器则添加更严密的安全措施来建立服务器和浏览器之间的加密连接,以便可以在互联网上发送像信用卡号码这样的敏感信息。
?????? 实际上那就是提供标准静态网页的Web服务器的所有机理。静止网页是指那些除非创作者进行编辑,否则不会更改的网页。
那动态的网页会是什么情况呢?例如:
? 任何留言薄都允许您在HTML表单中输入消息,在下一次查看该留言薄时,网页将包含新输入的内容。
? Network Solutions上的whois表单允许您在表单上输入域名,返回的网页将根据输入的域名而有所不同。
? 任何搜索引擎都允许您在HTML表单上输入关键字,然后它将根据您输入的关键字动态创建页面。
在所有这些情况下,Web服务器不仅仅是在“寻找文件”。实际上它是在根据查询的具体情况来处理信息并生成网页。几乎在所有的情况下,Web服务器都使用CGI脚本来完成这一过程。CGI脚本是另外一个专门的主题,在博闻网文章CGI脚本是怎么回事中说明。
有关Web服务器及相关主题的更多信息,请查看下一页上的链接。
那动态的网页会是什么情况呢?例如:
? 任何留言薄都允许您在HTML表单中输入消息,在下一次查看该留言薄时,网页将包含新输入的内容。
? Network Solutions上的whois表单允许您在表单上输入域名,返回的网页将根据输入的域名而有所不同。
? 任何搜索引擎都允许您在HTML表单上输入关键字,然后它将根据您输入的关键字动态创建页面。
在所有这些情况下,Web服务器不仅仅是在“寻找文件”。实际上它是在根据查询的具体情况来处理信息并生成网页。几乎在所有的情况下,Web服务器都使用CGI脚本来完成这一过程。CGI脚本是另外一个专门的主题,在博闻网文章CGI脚本是怎么回事中说明。
常用开发工具及详解:
php
jsp
dreamwaver