[转]HTTP协议及其发展(HTTP请求方法及HTTP简单工作原理)

0 views
Skip to first unread message

dinas...@gmail.com

unread,
Nov 21, 2006, 9:48:06 PM11/21/06
to WEB开发技巧回收站
摘 要 HTTP(超文本传输协议)是浏览器与Web服务器共同遵守的协议。本文详细介绍了HTTP协议的消息格式、工作原理及客户机服务器间的互连方式。

关键词 HTTP URL 状态代码 代理服务器

HTTP和HTML构成了Web平台的基础。HTTP是通用的、无状态的、面向对象的协议,可以支持多媒体信息的传递。HTTP的会话期分为四个步骤:客户端程序与服务器建立连接后,发送请求,服务器进行应答,然后关闭连接。

1 客户端请求
在申请互联网上的信息时,用户输入URL告诉客户端程序信息在网络中的位置,例如HTTP://www.xyz.com/Index.htm。URL是用来唯一标识某个资源的存放位置的。URL格式如下:
<METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE>
其中:METHOD是传输协议名称,通过它可以区分申请服务的类型,常用的协议如表1所示。

表1 Web中的协议

协 议 全 名 协 议 全 名
File 本地文件 TELNET
远程登录协议
HTTP 超文本传输协议 WAIS
广域信息检索协议
FTP 文件传输协议 NEWS
新闻传输协议
GOPHER GOPHER协议
MAILTO 电子邮件的相关协议

HOST指向信息所在的主机,它既可以是域名,也可以是IP地址。PORT指定了与主机建立连接时的端口,当使用HTTP协议的默认端口80时,可省略端口号。PATH和FILE用来确定资源在主机中的位置。
客户端程序得到URL后,通过TCP/IP和主机www.xyz.com建立连接,向服务器发送请求:GET
HTTP://www.xyz.com/Index.htm
http/1.0。HTTP请求由三部分组成:请求方法、URL和HTTP协议的版本号,它们之间用空格分隔。
HTTP协议中最常用的请求方法有五种,它们是GET、POST、HEAD、PUT和DELETE。
GET是最早使用的一种请求方法。GET方法要求服务器返回指定信息的全部内容。如果URL代表一个文件(如index.htm),则返回文件的内容;如果URL指向程序代码(如Formmail.cgi),那么服务器就运行这个程序,将结果作为应答返回。
POST方法为基于Web平台的应用带来了真正的交互性,它提供了由客户端向服务器传送大量信息的途径。使用POST时,信息作为独立实体附在POST请求后面,理论上可以向服务器发送任意大小的信息,CGI程序从标准输入设备读入该信息。
HEAD方法申请一个资源的相关信息,服务器发送的不是该资源的内容,而是该资源相关信息,如资源的最后一次修改时间、长度、有效期等内容。HEAD方法可以用于探测网络中的断点或了解资源的更新情况。
用户通过PUT方法发送请求时,附加一个信息实体,要求服务器按照用户指定的URL存储该信息。这样用户通过客户端程序就可以更新位于服务器上的信息了。PUT与POST都在请求的后面附加了一个信息实体,而它们的不同点在于:POST方法要求URL指定的程序将提交的信息作为标准输入读入,进行处理;而PUT方法要求将提交的信息设置为指定URL。
DELETE方法与PUT方法相反,它要求从服务器删除URL指向的信息。
除了上述信息外,在请求中还可以包括其他信息,让服务器更好地了解用户的要求。
2 服务器应答
Web服务器建立一个HTTP进程,该进程建立消息队列,监听80端口收到的请求。当收到请求后进行响应,响应通常象下面显示的格式:
例一:HTTP响应的帧格式示意
HTTP/1.0 200 OK
Date: Mon, 19 Feb 1998 17: 24: 19 GMT
Server: Apache/1.0.2
Content-type: text/html
Content-length: 5244
Last-modified: Tue, 06 Feb 1998 19: 23: 01 GMT
<html>
......
</htm1>
响应由三部分组成:状态行、头信息和响应实体。第一行为状态行,它包括由空格分隔的三个元素: HTTP版本号 状态代码 原因短语
在请求和应答过程中都带有版本号,用于帮助客户程序与服务器协商使用协议类型。状态代码是1个三位的十进制数,它用于表示服务器对请求的处理结果。原因短语以文字形式详细解释了响应代码的含义。状态代码的分类方法如表2所示。

表2 状态代码类型

代码 类别 含 义
1** 信息
这些代码不使用,保留以备未来使用
2** 成功 请求已成功接收,理解和接受
3** 重定向 必须采取进一步操作以完成请求
4** 客户机错误
请求包含错误的语法或无服务器故障的情况下不能实现

5** 服务器错误
服务器不能实现一个明显有效的请求

上面例子中二至六行是头信息的内容。它向客户机提供一些相关信息。第二行是服务器处理该请求的时间;第三行是服务器的类型及版本号;第四行响应信息的MIME类型,它表明了信息的类别,浏览器根据这个域段判断收到的是HTML文件,还是图像,或是程序代码;第五行是信息实体的长度。后面的内容就是信息实体,这里传送的是一个HTML文件。
3 申请网页的全过程
一个网页通常包含图形、声音、程序等对象,因而要向服务器进行多次请求。HTTP1.0规定每个请求都要建立新的连接。因而,申请一个网页的过程可以描述为:

客户端:请发送Index.htm。
服务器:传送index.htm内容,文件长度8362字节,关闭连接。
客户端:请发送/Background.gif。
服务器:传送/Background.gif,文件长度2764字节,关闭连接。
...
...

HTTP1.0每次请求/应答都要建立一个TCP/IP连接,占用了大量处理器时间。HTTP1.1则支持持续连接,很好的解决了这个问题。建立持续连接后,进行第一次请求应答后并不立即关闭连接,而是进行多次请求应答后,在指定时间内没有接到新的申请就关闭连接。这样可以减少服务器上线程数目,提高响应速度。但HTTP1.1协议依旧是无状态协议,两个请求之间,服务器不记录任何状态信息。

4 HTTP的三种连接方式
HTTP给出了客户机和服务器的三种互连方式。第一种是直联方式,客户端程序直接和Web服务器连接,发出申请。服务器监听网络上的请求,当请求到达时,就建立新的线程处理请求,并将应答内容传送给客户端程序。
第二种请求应答方式加入了一个中间件,即代理服务器。在这种情况下,客户机向代理服务器发出申请。代理服务器以客户机的身份向Web服务器发送申请。Web服务器将应答内容传送至代理服务器,再由代理服务器转发给客户机。
代理服务器可分为两种:安全代理和缓存代理。安全代理在防火墙软件中最为常见,防火墙作为安全代理将局部网络与Internet分隔开。
缓存代理在本地硬盘开辟一个缓存空间,将用户访问过的信息存储在本地。当接收到一个请求后,首先检查请求的数据是否存储在本地。如果在缓存中发现了申请的数据,则要进一步判断本地的数据是否有效?如果数据已过期,服务器就返回信息的全部内容。代理服务器接收到数据后转发给客户机,同时更新缓存;如果代理服务器保存的数据有效,Web服务器就仅返回状态码304(没有修改),代理服务器将保存在缓存中的数据返回客户机。代理服务器可以有效地提高响应速度,减轻网络负载,节省上网费用。
最后一种请求响应模式也涉及到中间件,称为隧道(Tunnel)。隧道与代理服务器不同,隧道只是介于客户机与服务器之间负责转发请求和响应的一种机制,通常用在非TCP/IP的网络环境中传送HTTP数据包。

Reply all
Reply to author
Forward
0 new messages