WWW服务器设计
- 格式:doc
- 大小:107.00 KB
- 文档页数:9
第一章概述
如今,上网已成为最热门话题,通过Internet,我们既能获取信息又能发布信息,而迅速发展的Web技术更是给Internet应用提供了一个很好的发展方向。当今的许多应用都是基于web技术的,如电子商务、视频会议、远程医疗诊断等。由于HTMI 语言的标准统一性,只要在设备里建立一个微型web服务器,人们就可以使用现有的Web浏览器与该设备进行双向交互、接收或发送信息。因此,针对微型web服务器的研究和应用,具有重大的意义,它为我们管理、控制和监测各种各样的设备提供了一个很好的途径一基于Internet,也就是说,只要设备接入了Internet,我们就可以在世界上的任何地方十分方便地控制、操纵那些配备有微型Web服务器的设备。
一般来说,Web服务器通常由以下几个部分组成:(1)服务器初始化部分.这部分主要完成Web服务器的初始化工作,如建立守护进程、创建TCP套接字、绑定端口、将TCP套接字转换成侦听套接字,进入循环结构,等待接收用户浏览器连接.(2)接收客户端请求.由于客户端请求以文本行的方式实现,所以服务器一般也以文本行为单位接收.(3)解析客户端请求.这部分工作比较复杂,需要解析出请求的方法、URL目标、可选的查询信息及表单信息.如果请求方法为HEAD,则简单地返回响应首部即可;如果方法是GET,则首先返回响应首部,然后将客户端请求的URL目标文件从服务器磁盘上读出,再发送给客户端。(4)发送响应信息之后,关闭与客户机的连接.
在了解WEB服务器的基本结构后,就需要更进一步了解如何实现服务器与协议的连接,那就需要用到CSOCK,这也是本次设计中的核心与重点。通过SOCKET,利用VC++编程就能基本实现了简易的WEB服务器的设计,并能在window系统下运行良好的运行,实现web 服务器基本功能:页面访问请求响应、HTML文件的解析以及数据发送。
第二章 WEB服务体系结构
2.1 WEB服务器基本构架
Web应用的基本构架包括浏览器、网络和Web服务器。浏览器向服务器请求Web页,Web页可能包括由浏览器解释执行的客户端脚本,而且可以与浏览器、页内容和页中包含的其他控件(Java Applet、ActiveX控件和插件等)进行交互。用户向Web页输入信息或通过超级链接导航到其它Web页,与系统进行交互,改变系统的“业务状态”。
2.2 WEB系统的基本原理是请求/响应
客户端,浏览器接受用户输入的网页地址(URL)并进行分析,从而得到网页的文件名字和存放网页的计算机地址以及服务程序的端口号,首先根据计算机地址及端口号与服务器建立连接,然后把网页名称及浏览器本身的有关信息按照一定的格式组织起来,发给服务器,这就是‘请求’。比如用户输入http://kulin.ts/index.html,从而可知:
(1)计算机名称为kulin.ts根据这个名字能获知其计算机地址
(2)端口号为80(http服务的默认端口号)
(3)页面的文件名为index.html
浏览器就与kulin上端口号为80的服务程序建立连接,并把类似下面的数
据发过(作为服务‘请求’):
GET /index.htm HTTP/1.1
Accept:image/gif,image/x-xbitmap,application/vnd.ms-powerpoint,*/*
Accept-Language:ch
UA-pixels:800*600
UA-color:color16
UA-OS:Windows xp
UA-CPU:P41.6
User-Agent:Mozilla/2.0(compatible’MSIE3.01;Window XP
Host:kulin.ts
Connection:Keep-Alive
其中第一行说明了文件名称(index.html)、请求的类型(GET)及浏览器支持的协议版本(HTTP/1.0)
服务器端接受到请求后,对其进行分析,解析出网页的文件名称及其他信息(比如请求的类型、处理要求等),根据网页的文件名称到磁盘上提取文件内容,把文件内容和一些必要的说明信息打包后发给浏览器,然后断开连接,这就是“响应”。(浏览器接到文件内容后就将其中的内容显示出来了)比如对于文件长度为2559B的index.html来说,可以发送如下数据作为“响应”:
HTTP/1.1 200 OK
Server: kulin.ts-HttpSvr/1.1
Date:WED,20 may 2006 12:45:21
Content-type:text/html
Content-length:2559
Last-Modified:Sun,22 may 2006 14:21:50
<接下来是index.htm的文件内容>
上述数据分2大部分,第1部分为“头”,其中,第1行是状态行,包括服务器执行的HTTP版本及本次响应的状态码。后4行分别说明了服务器名称、当前日期、数据类型、数据长度、最后修改的日期和时间。第2部分为数据“体”,是“请求”要求传送的数据,它跟在1个空行之后。
当然,客户端和服务器之间还可能有一些中间环节,比如代理服务器、网关、“隧道”等,在此我们先不予考虑。
2.3 WEB服务器/浏览器的通信
要完成Web服务,除了网络通信链路的建立和拆除,之外至少还要有二方面的功能:“分折请求”和“构造响应”。客户端与服务器交换数据之前,首先用TCP/IP建立连接,客户端向服务器请求数据,服务器则向客户端响应并提供数据.客户端和服务器以HTTP协议进行请求和响应.服务器和客户端只能为一次事务处理建立并维持连接,完成一次事务处理后便结束连接.
每一个客户端向服务器发送请求均以方法(Method)开始,后跟对象的URL.客户端一般要在上述信息中补充所采用HTTP协议的版本号,其后跟一个回车换行(CRLF)字符对.依据请求情况,浏览器可能在CRLF后加上浏览器按特别的首部格式编码的信息.完成后,浏览器给请求加上一个CRLF.还可依据请求情况,把一个实体(MIME格式文档)加到整个请求之后.一个HTTP方法实际上是一条命令,客户端用它来说明其请求目的,常用的有GET,HEAD 和POST.
Web服务器收到请求并解析之后,以一个HTTP响应消息响应客户端的请求.这个响应消息通常以HTTP协议版本号开始,后面是三位状态码和一个原因短语(Reason phrase),其后是一个CRLF,再后是请求的信息(它被服务器以一种特殊的首部格式编码),最后,服务器加上一个CRLF.其后还可以有一个可选实体.状态码是三位数,它描述了服务器理解和满足请求的情况,原因短语是状态代码的一个简短说明.HTTP协议版本号、状态代码、原因短语一起构成了状态行.
上述分析不难看出,接收客户端请求、解析客户端请求、响应客户端请求、向客户端回送请求的结果是Web服务器所需完成的主要任务,Web服务器程序代码主要是为了完成这几项任务.
2.3.1 分析请求
如前文所述,“请求”的第1行数据是最重要的,它的格式是:
方法资源地址 HTTP版本号回车换行
“方法”主要有3种:
GET:要求必须返回一定的内容。有时还必须根据“请求”的要求先对内容做一定的处理(比如解压缩或根据时间进行过滤)。
HEAD:处理办法和GET完全相同,但要求只返回“头”,而不可返回任何实质内容(“体”)。
POST:用来处理网页的附属内容,比如“注解”、数据回送等。
作为简单的服务器,我们只考虑第一行,且只处理GET请求,版本号不予理睬。
2.3.2构造响应
如前文所述,响应的第1行是状态行,非常重要,格式如下:
HTTP 版本号状态码状态文字说明回车换行
版本号可取HTTP/1.1;状态码是3位数字,根据情况按表2.1所示代码取值。
表2.1 状态码值
代码特征含义举例
1 开头的
2 开头的3开头的4开头的
5开头的保留未用
成功
需要进一步处理
客户断错误
服务器端错误
比如200表示处理成功
比如400表示“请求”有错,
404表示找不到客户指定的文件
作为简易的服务器,“响应”可以只返回状态行和文件内容,即送回如下的内容: