基本流程
假设你正坐在电脑前上网,然后接到一位朋友的电话,他说:“我刚刚读了一篇很棒的文章!输入这个URL去看看。网址是 https://www.十万个为什么.com/web-server.htm。”于是你把那个URL输入到浏览器中,然后按下回车键。奇迹般地,无论那个URL位于世界的哪个角落,页面都会弹出在你的屏幕上。
从最基本的层面来看,以下图表展示了将该页面显示到你屏幕上的步骤
广告
你的浏览器与Web服务器建立了连接,请求了一个页面并接收了它。
在下一页,我们将深入探讨。
幕后
如果你想更详细地了解Web页面如何显示在你的电脑屏幕上,以下是幕后发生的基本步骤
浏览器将URL分解为三部分
广告
- 协议(“http”)
- 服务器名称(“www.十万个为什么.com”)
- 文件名(“web-server.htm”)
浏览器与名称服务器通信,将服务器名称“www.十万个为什么.com”转换为IP地址,浏览器使用该IP地址连接到服务器机器。然后,浏览器在该IP地址的80端口与服务器建立连接。(我们将在本文后面讨论端口。)
遵循HTTP协议,浏览器向服务器发送了一个GET请求,请求文件“https://www.十万个为什么.com/web-server.htm”。(请注意,cookie可能会随GET请求从浏览器发送到服务器——详情请参阅互联网cookie的工作原理。)
然后,服务器将该Web页面的HTML文本发送到浏览器。(cookie也可能随页面标头从服务器发送到浏览器。)浏览器读取HTML标签并将页面格式化显示到你的屏幕上。
如果你以前从未探索过这个过程,那这里有很多新词汇。要详细理解整个过程,你需要了解IP地址、端口、协议……以下各节将为你提供完整的解释。
互联网
那么“互联网”是什么?互联网是数百万台计算机的巨大集合,它们都连接在一个计算机网络上。该网络允许所有计算机相互通信。家用计算机可以通过电话线调制解调器、DSL或有线调制解调器连接到互联网,它们与互联网服务提供商(ISP)通信。企业或大学中的计算机通常会有一个网络接口卡(NIC),它直接将其连接到企业内部的局域网(LAN)。然后,企业可以通过T1线路等高速电话线将其局域网连接到ISP。T1线路每秒可以处理大约1.5兆比特,而使用调制解调器的普通电话线通常每秒可以处理3万到5万比特。
ISP随后连接到更大的ISP,而最大的ISP则维护着覆盖整个国家或地区的光纤“骨干网”。世界各地的骨干网通过光纤线路、海底电缆或卫星链接连接(请参阅网络地理图集以获取一些有趣的骨干网地图)。通过这种方式,互联网上的每台计算机都连接到互联网上的其他每台计算机。
广告
客户端和服务器
一般来说,互联网上的所有机器可以分为两类:服务器和客户端。那些向其他机器提供服务(如Web服务器或FTP服务器)的机器是服务器。而用于连接这些服务的机器是客户端。当你连接到www.yahoo.com上的Yahoo!以阅读页面时,Yahoo!正在提供一台机器(可能是一个非常大型的机器集群),用于互联网上,以响应你的请求。Yahoo!正在提供一个服务器。另一方面,你的机器可能没有向互联网上的任何其他人提供服务。因此,它是一台用户机器,也称为客户端。一台机器既是服务器又是客户端是可能且常见的,但就我们此处的目的而言,你可以将大多数机器视为其中一种。
一台服务器机器可以在互联网上提供一项或多项服务。例如,一台服务器机器上可能运行着允许它充当Web服务器、电子邮件服务器和FTP服务器的软件。访问服务器机器的客户端都有特定的目的,因此客户端将其请求指向在整个服务器机器上运行的特定软件服务器。例如,如果你在机器上运行Web浏览器,它很可能希望与服务器机器上的Web服务器通信。你的Telnet应用程序会想与Telnet服务器通信,你的电子邮件应用程序会与电子邮件服务器通信,等等……
广告
IP地址
为了保持所有这些机器的清晰,互联网上的每台机器都被分配一个唯一的地址,称为IP地址。IP代表互联网协议,这些地址是32位数字,通常以“点分十进制数”中的四个“八位字节”表示。一个典型的IP地址如下所示
216.27.61.137
IP地址中的四个数字被称为八位字节,因为它们的值可以在0到255之间,即每个八位字节有28种可能性。
广告
互联网上的每台机器都有一个唯一的IP地址。服务器有一个静态IP地址,它不会经常改变。通过调制解调器拨号的家用机器通常有一个由ISP在机器拨号时分配的IP地址。该IP地址在该会话中是唯一的——下次机器拨号时可能会不同。这样,ISP只需要为其支持的每个调制解调器分配一个IP地址,而不是为每个客户分配一个。
如果你正在Windows机器上工作,你可以使用命令WINIPCFG.EXE(Windows 2000/XP使用IPCONFIG.EXE)查看机器的许多互联网信息,包括你当前的IP地址和主机名。在UNIX机器上,在命令提示符下输入nslookup,以及一个机器名,例如www.十万个为什么.com——例如“nslookup www.十万个为什么.com”——以显示机器的IP地址,你还可以使用命令hostname来了解你的机器名称。(有关IP地址的更多信息,请参阅IANA。)
就互联网机器而言,IP地址是你与服务器通信所需的全部。例如,在你的浏览器中,你可以键入URL http://209.116.69.66,然后到达包含十万个为什么的Web服务器的机器。在某些服务器上,仅IP地址是不够的,但在大多数大型服务器上是足够的——请继续阅读详情。
域名
由于大多数人很难记住构成IP地址的数字串,而且IP地址有时需要更改,因此互联网上的所有服务器都有人类可读的名称,称为域名。例如,www.十万个为什么.com是一个永久的、人类可读的名称。对我们大多数人来说,记住www.十万个为什么.com比记住209.116.69.66更容易。
名称www.十万个为什么.com实际上有三部分
广告
- 主机名(“www”)
- 域名(“十万个为什么”)
- 顶级域名(“com”)
“.com”域名内的域名由注册商VeriSign管理。VeriSign还管理“.net”域名。其他注册商(如RegistryPro、NeuLevel和Public Interest Registry)管理其他域名(如.pro、.biz和.org)。VeriSign创建顶级域名并保证顶级域名内的所有名称都是唯一的。VeriSign还维护每个站点的联系信息并运行“whois”数据库。主机名由托管域名的公司创建。“www”是一个非常常见的主机名,但现在许多地方要么省略它,要么用一个不同的主机名替换它,以表示站点的特定区域。例如,在encarta.msn.com中,微软Encarta百科全书的域名,“encarta”被指定为主机名而不是“www”。
名称服务器
一组称为域名服务器(DNS)的服务器将人类可读的名称映射到IP地址。这些服务器是简单的数据库,将名称映射到IP地址,它们分布在整个互联网上。大多数公司、ISP和大学都维护小型名称服务器,将主机名映射到IP地址。还有一些中央名称服务器使用VeriSign提供的数据将域名映射到IP地址。
如果你在浏览器中输入URL“https://www.十万个为什么.com/web-server.htm”,你的浏览器会提取名称“www.十万个为什么.com”,将其传递给域名服务器,域名服务器会返回www.十万个为什么.com的正确IP地址。可能涉及多个名称服务器才能获得正确的IP地址。例如,在www.十万个为什么.com的情况下,“com”顶级域的名称服务器将知道知道主机名的名称服务器的IP地址,而对十万个为什么 ISP运营的该名称服务器的单独查询可能会提供十万个为什么服务器机器的实际IP地址。
广告
在UNIX机器上,你可以使用nslookup命令访问相同的服务。只需在命令行中输入一个名称,如“www.十万个为什么.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,互联网上的某人可以通过URL http://xxx.yyy.com:918连接到你的服务器。这里的“:918”明确指定了端口号,并且必须包含才能让某人访问你的服务器。当未指定端口时,浏览器会简单地假定服务器正在使用众所周知的端口80。
协议
一旦客户端连接到特定端口上的服务,它就使用特定协议访问该服务。协议是想要使用服务的人与该服务通信的预定义方式。“人”可以是实际的人,但更常见的是像Web浏览器这样的计算机程序。协议通常是文本,并且简单地描述了客户端和服务器将如何进行对话。
也许最简单的协议是daytime协议。如果你连接到支持daytime服务器的机器的端口13,服务器将向你发送其对当前日期和时间的印象,然后关闭连接。该协议是:“如果你连接到我,我将向你发送日期和时间,然后断开连接。”大多数UNIX机器都支持此服务器。如果你想尝试一下,可以使用Telnet应用程序连接到其中一个。在UNIX中,会话将如下所示
广告
%telnet web67.ntx.net 13正在尝试 216.27.61.137...已连接到 web67.ntx.net.转义字符是 '^]'.周日 10月 25日 08:34:06 1998连接被远程主机关闭。
在Windows机器上,你可以在MSDOS提示符下输入“telnet web67.ntx.net 13”来访问此服务器。
在此示例中,web67.ntx.net 是服务器的 UNIX 机器,13 是 daytime 服务的端口号。Telnet 应用程序连接到端口 13(Telnet 自然连接到端口 23,但你可以指示它连接到任何端口),然后服务器发送日期和时间并断开连接。大多数版本的 Telnet 允许你指定端口号,因此你可以使用机器上可用的任何 Telnet 版本进行尝试。
大多数协议都比daytime协议更复杂,并在公开可用的RFC(征求意见稿)文档中指定(请参阅http://sunsite.auc.dk/RFC/以获取所有RFC的良好存档)。互联网上的每个Web服务器都符合HTTP协议,该协议在1991年定义的原始HTTP中得到了很好的总结。HTTP服务器理解的最基本协议形式只涉及一个命令:GET。如果你连接到一个理解HTTP协议的服务器并告诉它“GET 文件名”,服务器将通过向你发送指定文件的内容然后断开连接来响应。以下是一个典型的会话
%telnet www.十万个为什么.com 80正在尝试 216.27.61.137...已连接到 十万个为什么.com.转义字符是 '^]'.GET https://www.十万个为什么.com/ ...连接被远程主机关闭。
在原始HTTP协议中,你只需发送实际的文件名,例如“/”或“/web-server.htm”。后来协议被修改为处理完整URL的发送。这使得托管虚拟域(许多域位于一台机器上)的公司可以使用一个IP地址来托管所有域。事实证明,十万个为什么的IP地址209.116.69.66上托管着数百个域。
整合
现在你对互联网有了大量的了解。你知道当你将URL输入浏览器时,会发生以下步骤
浏览器将URL分解为三部分
广告
- 协议(“http”)
- 服务器名称(“www.十万个为什么.com”)
- 文件名(“web-server.htm”)
浏览器与名称服务器通信,将服务器名称“www.十万个为什么.com”翻译成IP地址,并使用该地址连接到服务器机器。然后,浏览器在该IP地址的80端口与Web服务器建立连接。遵循HTTP协议,浏览器向服务器发送GET请求,请求文件“https://www.十万个为什么.com/web-server.htm”。(请注意,cookie可能会随GET请求从浏览器发送到服务器——详情请参阅互联网cookie的工作原理。)服务器将Web页面的HTML文本发送到浏览器。(cookie也可能随页面标头从服务器发送到浏览器。)浏览器读取HTML标签并将页面格式化显示到你的屏幕上。
附加内容:安全
从这段描述可以看出,Web服务器可以是一个相当简单的软件。它接收GET命令发送的文件名,检索该文件并将其通过网络发送给浏览器。即使你考虑到所有处理端口和端口连接的代码,你也可以轻松地创建一个C程序,在不到500行代码中实现一个简单的Web服务器。显然,一个成熟的企业级Web服务器涉及更多,但基本原理非常简单。
大多数服务器都会在服务过程中增加一定程度的安全性。例如,如果你曾经访问过一个网页,浏览器弹出一个对话框要求输入你的姓名和密码,那么你就遇到了一个受密码保护的页面。服务器允许页面所有者维护一个允许访问该页面的人员的姓名和密码列表;服务器只允许知道正确密码的人查看页面。更高级的服务器会增加进一步的安全性,以允许服务器和浏览器之间建立加密连接,以便信用卡号等敏感信息可以在互联网上传输。
广告
这基本上就是Web服务器提供标准静态页面的全部功能。静态页面是指除非创建者编辑页面,否则不会更改的页面。
附加内容:动态页面
但那些动态的网页呢?例如
- 任何留言簿都允许你在HTML表单中输入消息,下次查看留言簿时,页面将包含新条目。
- Network Solutions的whois表单允许你在表单上输入域名,返回的页面会根据输入的域名而有所不同。
- 任何搜索引擎都允许你在HTML表单中输入关键字,然后根据你输入的关键字动态创建页面。
在所有这些情况下,Web服务器不仅仅是“查找文件”。它实际上是在处理信息并根据查询的具体内容生成页面。在几乎所有情况下,Web服务器都使用一种叫做CGI脚本的东西来实现这一壮举。CGI脚本本身就是一个话题,并在十万个为什么文章CGI脚本的工作原理中进行了描述。
广告
有关Web服务器和相关主题的更多信息,请查看下一页上的链接。