资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,HTTP,协议基础,1,1,、,HTTP,与,WEB,服务,HTTP,应用层协议是,Web,的核心。,HTTP,协议运行在客户程序和服务器程序中。不同端系统上的客户程序和服务器程序通过交换,HTTP,消息彼此交流。,HTTP,定义,Web,客户(即浏览器)如何从,web,服务器请求,Web,页面,以及服务器如何把,Web,页面传送给客户。,2,Web,页面(,web page,,也称为文档)由多个对象构成。对象(,object),仅仅是可由单个,URL,寻址的文件,例如,HTML,文件、,JPG,图像、,GIF,图像、,JAVA,小应用程序、语音片段等。,例如,如果一个,Web,页面包含,HTML,文本和5个,JPEG,图像,那么它由6个对象构成,即基本,H1ML,文件加5个图像。,3,浏览器是,web,的用户代理,它显示所请求的,Web,页面,并提供大量的导航与配置特性。,Web,浏览器还实现,HTTP,的客户端,Web,服务器存放可由,URL,寻址的,Web,对象,,,web,服务器还实现,HTTP,的服务器端。,4,、,Http,工作流程,HTTP,客户端启动,TCP,连接,(,创建插口,),到服务器,端口,80,。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问,。,http,报文,(,应用层协议报文,),在浏览器,(http client),和,Web,服务器,(http server),之间进行交换。,客户端套接字。客户往自己的套接字发送,HTTP,请求消息,也从自己的套接字接收,HTTP,响应消息。,5,服务器从自己的套接字接收,HTTP,请求消息,也往自己的套接字发送,HTTP,响应消息。,关闭,TCP,连接,注意:,在向客户发送所请求文件的同时,服务器并没有存储关于该客户的任何状态信息。即便某个客户在几秒钟内再次请求同一个对象,服务器也不会响应说:自己刚刚给它发送了这个对象。,所以,http,是,“,无状态,(,stateless,),”,的,服务,不保留任何访问过的请求信息,6,当用户请求一个,Web,页面(譬如说点击某个超链接)时,浏览器把请求该页面中各个对象的,HTTP,请求消息发送给服务器。服务器收到请求后,以运送含有这些对象,HTTP,响应消息作为响应。,7,、,HTTP,连接的类型,非持久连接和持久连接,HTTP,既可以使用非持久连接(,nonpersistent connection),,也可以使用持久连接(,persistent connection)。HTTP/1.0,使用非持久连接,,HTTP/1.1,默认使用持久连接。,8,.1,非持久连接,非持久连接情况下从服务器到客户传送一个,Web,页面的步骤。假设该贝面由1个基本,HTML,文件和10个,JPEG,图像构成,而且所有这些对象都存放在同一台服务器主机中。再假设该基本,HTML,文件的,URL,为:,1.,HTTP,客户初始化一个与服务器主机,中的,HTTP,服务器的,TCP,连接。,HTTP,服务器使用默认端口号80监听来自,HTTP,客户的连接建立请求。2.,HTTP,客户经由与,TCP,连接相关联的本地套接字发出,个,HTTP,请求消息。这个消息中包含路径名/,somepath/index.html。,10,3.HTTP,服务器经由与,TCP,连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/,somepath/index.html,,经由同一个套接字发出包含该对象的响应消息。,4.,HTTP,服务器告知,TCP,关闭这个,TCP,连接(不过,TCP,要到客户收到刚才这个响应消息之后才会真正终止这个连接)。,11,5.,HTTP,客户经由同一个套接字接收这个响应消息。,TCP,连接随后终止。该消息标明所封装的对象是一个,HTML,文件。客户从中取出这个文件,加以分析后发现其中有10个,JPEG,对象的引用。6.给每一个引用到的,JPEG,对象重复步骡1-4。,12,.2,持久连接,持久连接情况下,服务器在发出响应后让,TCP,连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。,通常,,HTTP,服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。,持久连接分为不带流水线(,without pipelining),和带流水线(,with pipelining),两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。,13,HTTP/1.1,的默认模式使用带流水线的持久连接。这种情况下,,HTTP,客户每碰到一个引用就立即发出一个请求,因而,HTTP,客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。,14,3.3,流水线和非流水线方式,流水线方式指没有收到上一个请求的对象就发送新的对象的请求,非流水线方式指必须要等到上一个请求的对象到达之后再发送新的对象的请求,15,4,、,HTTP,消息格式,HTTP,规范1.0,RPcl945,和,HTTP,1.1,RFC 2616,定义了,HTTP,消息的格式。,HTTP,消息分为请求消息和响应稍息两类。,16,4.1 HTTP,请求消息,下面是一个典型的,HTTP,请求消息:,GET/somedir/page.html HTTP/1.1Host:,Connection:closeUser-agent:Mozilla/4.0Accept-language:zh-cn(,额外的回车符和换行符),17,首先,这个消息是用普通的,ASCII,文本书写的。,其次,这个消息共有5行(每行以一个回车符和一个换行符结束),最后一行后面还有额外的一个回车特和换行符。,请求行,有3个宁段:方法字段、,URL,字段、,HTTP,版本宇段。,18,方法字段有若干个值可供选择,包括,GET、POST,和,HEAD。HTTP,请求消息绝大多数使用,GET,方法,,头部行,Host:,定存放所请求对象的主机。,请求消息中包含头部,Connection:close,是在告知服务器本浏览器不想使用持久连接;服务器发出所请求的对象后应关闭连接。,19,User-agent,头部行指定用户代理,也就是产生当前请求的浏览器的类型。本例的用户代理是,Mozilla/4.0,,它是,Nelscape,浏览器的一个版本。,20,HTTP,请求标准格式,Request,方 法,URL,版 本,首部字段名,首部行,:,值,首部字段名,值,:,实体主体,(通常不用),请求行,空格,回车换行,:,CRLF,CRLF,CRLF,CRLF,请求报文的类型是由它所采用的方法决定的。,21,附属体不在,GET,方法中使用,而是在,POST,方法中使用。,POST,方法适用于需由用户填写表单的场合,如往,google,搜索引擎中填入待搜索的词。用户提交表单后,,HEAD,方法与,GET,方法类似,两者的差别只是服务器在对,HEAD,方法的响应消息中去掉了所请求的对象,其他内容则与对,GET,方法的响应消息一样。,HEAD,方法通常用于,HTTP,服务器软件开发人员进行调试。,22,4.2 HTTP,响应消息,下面是一个典型的,HTTP,响应消息:,HTTP/1.1 200 0KConnectlon:closeDate:Thu,13 Oct 2005 03:17:33 GMTServer:Apache/2.0.54(Unix)Last,Nodified:Mon,22 Jun 1998 09;23;24 GMTContent,Length:682lContent,Type:text/html(,数据 数据 数据 数据 数据,),23,HTTP,响应标准格式,Response,版 本,状态码,短 语,首部字段名,首部行,:,值,首部字段名,值,:,实体主体,(有些响应报文不用),状态行,空格,回车换行,:,CRLF,CRLF,CRLF,CRLF,响应报文的开始行是,状态行,。,状态行包括三项内容,即,HTTP,的版本,状态码,,以及解释状态码的,简单短语。,开始行,24,5 HTTP,常用状态码,1,xx,表示通知信息的,如请求收到了或正在进行处理。,2,xx,表示成功,如接受或知道了。,3,xx,表示重定向,表示要完成请求还必须采取进一步的行动。,4,xx,表示客户的差错,如请求中有错误的语法或不能完成。,5,xx,表示服务器的差错,如服务器失效无法完成请求。,25,200 0,K;,请求成功,所请求信息在响应消息中返回。301,Moved Permanently:,所请求的对象己永久性迁移;新的,URL,在本响应消息的,Location:,头部指出。客户软件会自动请求这个新的,URL。400 Bad Request;,表示服务器无法理解相应请求的普通错误的状态码,26,404,Not Found:,服务器上不存在所请求的文档。,HTTP Version Not Support:,服务器不支持所请求的,HTTP,协议版本。,27,Cookies:,保存,“,状态,”,服务器产生一个,#,服务器认识这个,#,以备不时之需,:,认证,记忆用户的前序访问,先前的选择,服务器在响应报文中发送,“,cookie,”,给客户端,Set-cookie:1678453,客户端可以在后继的请求中发送,“,cookie,”,cookie:1678453,client,server,普通,http,请求报文,普通,http,响应报文,+,Set-cookie:#,普通,http,请求报文,cookie:#,普通,http,响应报文,普通,http,请求报文,cookie:#,普通,http,响应报文,cookie-,特定的,cookie-,特定的,28,Conditional GET:,客户端缓存机制,目的,:,如果客户端缓存了最新的请求对象,则服务器不必重复发送,客户端,:,在,http,请求报文中声明所缓存拷贝的生成日期,If-modified-since:,服务器,:,如果客户端缓存的拷贝是最新的,则在响应报文中不发请求的对象,:,HTTP/1.0 304 Not Modified,client,server,http,请求报文,If-modified-since:,http,响应报文,HTTP/1.0,304 Not Modified,对象未经修改,http,请求报文,If-modified-since:,http,响应报文,HTTP/1.1 200 OK,对象已,经修改,29,用,telnet,测试,http(,客户端操作,),1.,用,Telnet,连接测试用的服务器,:,打开,TCP,连接到,port 80,(,默认的,http,服务器端口,),位于,202.117.35.70,后续键入的内容将发送到,202.117.35.70,的,80,号端口,$,telnet 202.117.35.70,80,2.,键入一条,http,请求报文,:,GET/j1010/hello.htm HTTP/1.0,将该指令键入后,(,按两次回车键,),就将此最短之,(,但是完整的,),GET,请求发到了,http,服务器,3.,注意观察,http,服务器发回的响应报文,!,30,
展开阅读全文