2.1 HTTP协议?/b>
HTTP是一个属于应用层的面向对象的协议Q由于其捗快速的方式Q适用于分布式媒体信息系l。它?990q提出,l过几年的用与发展Q得C断地完善和扩展。目前在WWW中用的是HTTP/1.0的第六版QHTTP/1.1的规范化工作正在q行之中Q而且HTTP-NG(Next Generation of HTTP)的徏议已l提出?br /> HTTP协议的主要特点可概括如下Q?br />1.支持客户/服务器模式?br />2.单快速:客户向服务器h服务Ӟ只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每U方法规定了客户与服务器联系的类型不同?br />׃HTTP协议单,使得HTTP服务器的E序规模,因而通信速度很快?br />3.灉|QHTTP允许传输Lcd的数据对象。正在传输的cd由Content-Type加以标记?br />4.无连接:无连接的含义是限制每ơ连接只处理一个请求。服务器处理完客LhQƈ收到客户的应{后Q即断开q接。采用这U方式可以节省传输时间?br />5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺状态意味着如果后箋处理需要前面的信息Q则它必重传,q样可能D每次q接传送的数据量增大。另一斚wQ在服务器不需要先前信息时它的应答p快?/p>
2.2 HTTP协议的几个重要概?/b>
1.q接(Connection)Q一个传输层的实际环,它是建立在两个相互通讯的应用程序之间?br /> 2.消息(Message)QHTTP通讯的基本单位,包括一个结构化的八元组序列q过q接传输?br /> 3.h(Request)Q一个从客户端到服务器的h信息包括应用于资源的Ҏ、资源的标识W和协议的版本号
4.响应(Response)Q一个从服务器返回的信息包括HTTP协议的版本号、请求的状?例如“成功”或“没扑ֈ?和文的MIMEcd?br /> 5.资源(Resource)Q由URI标识的网l数据对象或服务?br /> 6.实体(Entity)Q数据资源或来自服务资源的回映的一U特D表C方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本n内容?br /> 7.客户?Client)Q一个ؓ发送请求目的而徏立连接的应用E序?br /> 8.用户代理(User agent)Q初始化一个请求的客户机。它们是览器、编辑器或其它用户工兗?br /> 9.服务?Server)Q一个接受连接ƈ对请求返回信息的应用E序?br /> 10.源服务器(Origin server)Q是一个给定资源可以在其上ȝ或被创徏的服务器?br /> 11.代理(Proxy)Q一个中间程序,它可以充当一个服务器Q也可以充当一个客hQؓ其它客户机徏立请求。请求是通过可能的翻译在内部或经q传递到其它的服务器中。一个代理在发送请求信息之前,必须解释q且如果可能重写它?br /> 代理l常作ؓ通过防火墙的客户机端的门P代理q可以作Z个帮助应用来通过协议处理没有被用户代理完成的h?br /> 12.|关(Gateway)Q一个作为其它服务器中间媒介的服务器。与代理不同的是Q网x受请求就好象对被h的资源来说它是源服务器Q发求的客户机ƈ没有意识到它在同|关打交道?br /> |关l常作ؓ通过防火墙的服务器端的门P|关q可以作Z个协议翻译器以便存取那些存储在非HTTPpȝ中的资源?br /> 13.通道(Tunnel)Q是作ؓ两个q接中的中介程序。一旦激z,通道便被认ؓ不属于HTTP通讯Q尽通道可能是被一个HTTPh初始化的。当被中l的q接两端关闭Ӟ通道便消失。当一个门?Portal)必须存在或中?Intermediary)不能解释中的通讯旉道被经怋用?br /> 14.~存(Cache)Q反应信息的局域存储?/p>
2.3 HTTP协议的运作方?/b>
HTTP协议是基于请求/响应范式的。一个客h与服务器建立q接后,发送一个请求给服务器,h方式的格式ؓQ统一资源标识W、协议版本号Q后ҎMIME信息包括h修饰W、客h信息和可能的内容。服务器接到h后,l予相应的响应信息,其格式ؓ一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内宏V?br /> 许多HTTP通讯是由一个用户代理初始化的ƈ且包括一个申请在源服务器上资源的h。最单的情况可能是在用户代理(UA)和源服务?O)之间通过一个单独的q接来完?见图2-1)?br /> ?-1
当一个或多个中介出现在请求/响应链中Ӟ情况变得复杂一些。中介由三种Q代?Proxy)、网?Gateway)和通道(Tunnel)。一个代理根据URI的绝Ҏ式来接受hQ重写全部或部分消息Q通过URI的标识把已格式化q的h发送到服务器。网x一个接收代理,作ؓ一些其它服务器的上层,q且如果必须的话Q可以把h译l下层的服务器协议。一个通道作ؓ不改变消息的两个q接之间的中l点。当通讯需要通过一个中?例如Q防火墙{?或者是中介不能识别消息的内ҎQ通道l常被用? ?-2
上面的图2-2表明了在用户代理(UA)和源服务?O)之间有三个中?A,B和C)。一个通过整个铄h或响应消息必ȝq四个连接段。这个区别是重要的,因ؓ一些HTTP通讯选择可能应用于最q的q接、没有通道的邻居,应用于链的终Ҏ应用于沿铄所有连接。尽图2-2是线性的Q每个参与者都可能从事多重的、ƈ发的通讯。例如,B可能从许多客h接收h而不通过AQƈ且/或者不通过C把请求送到AQ在同时它还可能处理A的请求?br /> M针对不作为通道的汇聚可能ؓ处理h启用一个内部缓存。缓存的效果是请求/响应链被~短Q条件是沉K的参与者之一h一个缓存的响应作用于那个请求。下图说明结果链Q其条g是针对一个未被UA或A加缓存的hQB有一个经qC来自O的一个前期响应的~存拯?br /> ?-3
在Internet上,HTTP通讯通常发生在TCP/IPq接之上。缺省端口是TCP 80Q但其它的端口也是可用的。但qƈ不预C着HTTP协议在Internet或其它网l的其它协议之上才能完成。HTTP只预C着一个可靠的传输?br /> 以上要介l了HTTP协议的宏观运作方式,下面介绍一下HTTP协议的内部操作过E?br /> 首先Q简单介l基于HTTP协议的客?服务器模式的信息交换q程Q如?-4所C,它分四个q程Q徏立连接、发送请求信息、发送响应信息、关闭连接?br /> ?-4
在WWW中,“客户”与“服务器”是一个相对的概念Q只存在于一个特定的q接期间Q即在某个连接中的客户在另一个连接中可能作ؓ服务器。WWW服务器运行时Q一直在TCP80端口(WWW的缺省端?监听Q等待连接的出现?br /> 下面Q讨论HTTP协议下客?服务器模式中信息交换的实现? 1.建立q接 q接的徏立是通过甌套接?Socket)实现的。客h开一个套接字q把它约束在一个端口上Q如果成功,q当于建立了一个虚拟文件。以后就可以在该虚拟文g上写数据q过|络向外传送?br /> 2.发送请?br /> 打开一个连接后Q客h把请求消息送到服务器的停留端口上,完成提出h动作?br /> HTTP/1.0 h消息的格式ؓQ?br /> h消息=h?通用信息|h头|实体? CRLF[实体内容]
h ?Ҏ hURL HTTP版本受CRLF
斏V ?GET|HEAD|POST|扩展Ҏ
U R L=协议名称+宿主?目录与文件名
h行中的方法描q指定资源中应该执行的动作,常用的方法有GET、HEAD和POST。不同的h对象对应GET的结果是不同的,对应关系如下Q?br /> 对象 GET的结?br /> 文g 文g的内?br /> E序 该程序的执行l果
数据库查询 查询l果
HEAD——要求服务器查找某对象的元信息,而不是对象本w?br /> POST——从客户机向服务器传送数据,在要求服务器和CGI做进一步处理时会用到POSTҎ。POST主要用于发送HTML文本中FORM的内容,让CGIE序处理?br /> 一个请求的例子为:
GET http://networking.zju.edu.cn/zju/index.htm HTTP/1.0
头信息又UCؓ元信息,即信息的信息Q利用元信息可以实现有条件的h或应{??br /> h头——告诉服务器怎样解释本次hQ主要包括用户可以接受的数据cd、压~方法和语言{?br /> 实体头——实体信息类型、长度、压~方法、最后一ơ修Ҏ间、数据有效期{?br /> 实体——请求或应答对象本n?br /> 3.发送响?br /> 服务器在处理完客Lh之后Q要向客h发送响应消息?br /> HTTP/1.0的响应消息格式如下:
响应消息=状态行(通用信息头|响应头|实体? CRLF 〔实体内宏V?br /> ???HTTP版本受状态码 原因叙述
状态码表示响应cd
1×× 保留
2×× 表示h成功地接?br /> 3×× 为完成请求客户需q一步细化请?br /> 4×× 客户错误
5×× 服务器错?
响应头的信息包括Q服务程序名Q通知客户h的URL需要认证,h的资源何时能使用?br /> 4.关闭q接
客户和服务器双方都可以通过关闭套接字来l束TCP/IP对话