全部博文(403)
分类: 系统运维
2006-08-02 20:56:22
当一个或多个中介出现在请求/响应链中时,情况就变得复杂一些。中介由三种:代理(Proxy)、网关(Gateway)和通道(Tunnel)。一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过URI的标识把已格式化过的请求发送到。网关是一个接收代理,作为一些其它的上层,并且如果必须的话,可以把请求翻译给下层的。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用。图2-2>
上面的图2-2表明了在用户代理(UA)和源(O)之间有三个中介(A,B和C)。一个通过整个链的请求或响应消息必须经过四个连接段。这个区别是重要的,因为一些HTTP通讯选择可能应用于最近的连接、没有通道的邻居,应用于链的终点或应用于沿链的所有连接。尽管图2-2是线性的,每个参与者都可能从事多重的、并发的通讯。例如,B可能从许多客户机接收请求而不通过A,并且/或者不通过C把请求送到A,在同时它还可能处理A的请求。
任何针对不作为通道的汇聚可能为处理请求启用一个内部缓存。缓存的效果是请求/响应链被缩短,条件是沿链的参与者之一具有一个缓存的响应作用于那个请求。下图说明结果链,其条件是针对一个未被UA或A加缓存的请求,B有一个经过C来自O的一个前期响应的缓存拷贝。
图2-3
在Internet上,HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP80,但其它的端口也是可用的。但这并不预示着HTTP在Internet或其它的其它之上才能完成。HTTP只预示着一个可靠的传输。
以上简要介绍了HTTP的宏观运作方式,下面介绍一下HTTP的内部操作过程。
首先,简单介绍基于HTTP的客户/模式的信息交换过程,如图2-4所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。
图2-4
在WWW中,“客户”与“”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为。WWW运行时,一直在TCP80端口(WWW的缺省端口)监听,等待连接的出现。
下面,讨论HTTP下客户/模式中信息交换的实现。 1.建立连接 连接的建立是通过申请套接字(Socket)实现的。客户打开一个套接字并把它约束在一个端口上,如果成功,就相当于建立了一个虚拟。以后就可以在该虚拟上写数据并通过向外传送。
2.发送请求
打开一个连接后,客户机把请求消息送到的停留端口上,完成提出请求动作。
HTTP/1.0 请求消息的格式为:
请求消息=请求行(通用信息|请求头|实体头)CRLF[实体内容]
请求 行=方法 请求URL HTTP版本号 CRLF
方 法=GET|HEAD|POST|扩展方法
U R L=名称+宿主名+目录与名
请求行中的方法描述指定资源中应该执行的动作,常用的方法有GET、HEAD和POST。不同的请求对象对应GET的结果是不同的,对应关系如下:
对象 GET的结果
的内容
该的执行结果
查询 查询结果
HEAD——要求查找某对象的元信息,而不是对象本身。
POST——从客户机向传送数据,在要求和CGI做进一步处理时会用到POST方法。POST主要用于发送HTML文本中FORM的内容,让CGI处理。
一个请求的例子为:
GET
头信息又称为元信息,即信息的信息,利用元信息可以实现有条件的请求或应答。
请求头——告诉怎样解释本次请求,主要包括用户可以接受的数据类型、压缩方法和语言等。
实体头——实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
实体——请求或应答对象本身。
3.发送响应
在处理完客户的请求之后,要向客户机发送响应消息。
HTTP/1.0的响应消息格式如下:
响应消息=状态行(通用信息头|响应头|实体头) CRLF 〔实体内容〕
状态行=HTTP版本号 状态码 原因叙述
状态码表示响应类型
1×× 保留
2×× 表示请求成功地接收
3×× 为完成请求客户需进一步细化请求
4×× 客户错误
5×× 错误
响应头的信息包括:服务名,通知客户请求的URL需要,请求的资源何时能使用。
4.关闭连接
客户和双方都可以通过关闭套接字来结束TCP/IP对话