20.1 介绍

本章是有关Web编程的介绍,可以帮助你对Python在因特网上的各种基础应用有个概要了解,例如通过Web页面建立用户反馈表单,通过CGI动态生成输出页面。

20.1.1 Web应用:客户端/服务器计算

Web应用遵循我们反复提到的客户端/服务器架构。这里,Web的客户端是浏览器,应用程序允许用户在万维网上查询文档。另外Web服务器端,进程运行在信息提供商的主机上。这些服务器等待客户和文档请求,进行相应的处理,返回相关的数据。正如大多数客户端/服务器的服务器端一样,Web服务器端被设置为“永远”运行。图20-1列举了Web应用的体验。这里,一个用户执行一个像浏览器的这类客户端程序与Web服务器取得连接,就可以在因特网上任何地方获得数据。

20.1 介绍 - 图1

图 20-1 因特网上的Web客户端和Web服务器。在因特网上客户端向服务器端发送一个请求,然后服务器端响应这个请求并将相应的数据返回给客户端

客户端可能向服务器端发出各种请求。这些请求可能包括获得一个网页视图或者提交一个包含数据的表单。这个请求经过服务器端的处理,然后会以特定的格式(HTML等)返回给客户端浏览。

Web客户端和服务器端交互使用的“语言”, Web交互的标准协议是HTTP(超文本传输协议)。 HTTP协议是TCP/IP协议的上层协议,这意味着HTTP协议依靠TCP/IP协议来进行低层的交流工作。它的职责不是路由或者传递消息(TCP/IP协议处理这些),而是通过发送、接收HTTP消息来处理客户端的请求。

HTTP协议属于无状态协议,它不跟踪从一个客户端到另一个客户端的请求信息,这点和我们现今使用的客户端/服务器端架构很像。服务器端持续运行,但是客户端的活动是按照这种结构独立进行的:一旦一个客户的请求完成后,活动将被终止。可以随时发送新的请求,但是他们会被处理成独立的服务请求。由于每个请求缺乏上下文背景,你可以注意到有些URL会有很长的变量和值作为请求的一部分,以便提供一些状态信息。另外一个选项是“cookie”——保存在客户端的客户状态信息。在本章的后面部分,我们将会看到如何使用URL和cookie来保存状态信息。

20.1.2 因特网

因特网是一个连接全球客户端和服务器端的变幻莫测的“迷雾”。客户端最终连接到服务器的通路,实际包含了不定节点的连通。作为一个客户端用户,所有这些实现细节都会被隐藏起来。抽象成为了从客户端到所访问的服务器端的直接连接。被隐藏起来的HTTP, TCP/IP协议将会处理所有的繁重工作。中间的环节信息用户并不关心,所以将这些执行过程隐藏起来是有好处的。图20-2展示了因特网的扩展视图。

如图20-2所示,因特网是由多种工作在一定规则下的(也许非连贯的)相互连接的网络组成的。图表左侧的焦点是Web客户端,在家上网的用户通过拨号连接到ISP(因特网供应商)上,上班族使用的则是公司的局域网。

图表的右半部分关注的是Web服务器端及位置所在。具有大型Web站点的公司会将他们全部的“Web服务器”放在ISP那里。这种物理安放被称为“整合”,这意味着你的服务器和其他客户的服务器一同放在ISP处被“集中管理”。这些服务器或许为客户提供了不同的数据或者有一部分为应付重负荷(高数量用户群)而设计成了可以存储重复数据的系统。小公司的Web站点或许不需要这么大的硬盘或者网络设备,也许仅有一个或者几个“整合”服务器安放在他们的ISP处就可以了。

在任何一种情况下,大多数“整合”服务器被部署在大型ISP提供的骨干网上,这意味着他们具有更高的“带宽”,如果你愿意,可以更接近因特网的核心点,从而可以更快地与因特网取得连接。这就允许客户端可以绕过许多网络直接快速的访问服务器,从而在指定的时间内可以使得更多的客户获得服务。

20.1 介绍 - 图2

图 20-2 因特网的统览。左侧指明了在哪里你可以找到Web客户端,而右侧则暗示了Web服务器的具体位置

有一点需要记清楚,Web应用是网络应用的一种最普遍的形式,但不是唯一的也不是最古老的一种形式。因特网的出现早于Web近30年。在Web出现之前,因特网主要用于教学和科研目的。因特网上的大多数系统都是运行在Unix平台上的——一个多用户操作系统,许多最初的网际协议至今仍被沿用。

这些协议包括telnet(允许用户在因特网上登录到远程的主机上,沿用至今), FTP协议(文本传输协议,用户通过上传和下载文件可以共享文件和数据,沿用至今), Gopher (Web搜索引擎的雏形——一个在互联网上爬动的小软件“gopher”可以自动寻找你感兴趣的数据), SMTP或者叫做简单邮件传输协议(这个协议用于最古老的也是应用最广泛的电子邮件),NNTP(新闻对新闻传输协议)。

由于Python的最初偏重的就是因特网编程,除了其他一些东西外你还可以找到上边提及的所有协议。可以这样区分“因特网编程”和“Web编程”,后者仅包括针对Web的应用程序开发,也就是说Web客户端和服务器是本章的焦点。

因特网编程涵盖更多范围的应用程序:包括我们之前提及的一些网际协议,例如FTP、SMTP等,同时也包括我们前一章提到的网络编程和套接字编程。