HTTP协议解析相关知识.docx
转HHTTPP协议解解析文章来源源:网络络转载 点击数数:11448 更新时时间:20009-99-144 100:355:277字体:收藏到:HTTPP协议详详解 掌握HTTTP虽然不不是必须须的,但但是如果果你知道道它的工工作原理理,那么么在学习习JSP开发中中的某些些知识就就可以易易如反掌掌了。一,HTTTP协议详详解之URL篇httpp(超文文本传输输协议)是一个个基于请请求与响响应模式式的、无无状态的的、应用用层的协协议,常常基于TCP的连接接方式,HTTTP1.1版本中中给出一一种持续续连接的的机制,绝大多多数的Web开发,都都是构建建在HTTTP协议之之上的Web应用。二、HTTTP协议详详解之请请求篇httpp请求由由三部分分组成,分别是是:请求求行、消消息报头头、请求求正文1、请求求行以一一个方法法符号开开头,以以空格分分开,后后面跟着着请求的的URI和协议议的版本本,格式式如下:Metthodd Reequeest-URII HTTTP-Verrsioon CCRLFF 其其中 Meethood表示请请求方法法;Reqquesst-UURI是一个个统一资资源标识识符;HTTTP-VVerssionn表示请请求的HTTTP协议版版本;CRLLF表示回回车和换换行(除除了作为为结尾的的CRLLF外,不不允许出出现单独独的CR或LF字符)。请求方法法(所有有方法全全为大写写)有多多种,各各个方法法的解释释如下:GETT 请求求获取Reqquesst-UURI所标识识的资源源POSST 在Reqquesst-UURI所标识识的资源源后附加加新的数数据HEEAD 请请求获取取由Reqquesst-UURI所标识识的资源源的响应应消息报报头PUUT 请请求服务务器存储储一个资资源,并并用Reqquesst-UURI作为其其标识DDELEETE 请求服服务器删删除Reqquesst-UURI所标识识的资源源TRAACE 请求求服务器器回送收收到的请请求信息息,主要要用于测测试或诊诊断COONNEECT保保留将来来使用OOPTIIONSS请求查查询服务务器的性性能,或或者查询询与资源源相关的的选项和和需求应应用举例例:GEET方法:在浏览览器的地地址栏中中输入网网址的方方式访问问网页时时,浏览览器采用用GET方法向向服务器器获取资资源,eg:GETT /fformm.httml HTTTP/11.1 (CRRLF)POSTT方法要要求被请请求服务务器接受受附在请请求后面面的数据据,常用用于提交交表单。eg:POSST /regg.jssp HHTTPP/ (CRLLF)AAcceept:imaage/giff,immagee/x-xbiit,. (CRRLF).HOSST: (CRRLF)Conntennt-LLenggth:22 (CRRLF)Connnecctioon:KKeepp-Allivee (CCRLFF)Caachee-Coontrrol:no-cacche (CRRLF)(CRRLF) /该CRLLF表示消消息报头头已经结结束,在在此之前前为消息息报头uuserr=jeeffrrey&&pwdd=12234 /此行以以下为提提交的数数据HEADD方法与GET方法几几乎是一一样的,对于HEAAD请求的的回应部部分来说说,它的的HTTTP头部中中包含的的信息与与通过GET请求所所得到的的信息是是相同的的。利用这个个方法,不必传传输整个个资源内内容,就就可以得得到Requuestt-URRI所标识识的资源源的信息息。该方方法常用用于测试试超链接接的有效效性,是是否可以以访问,以及最最近是否否更新。2、请求求报头后后述3、请求求正文(略) 三,HTTTP协议详详解之响响应篇HTTPP响应也也是由三三个部分分组成,分别是是:状态态行、消消息报头头、响应应正文11、状态态行格式式如下:HTTTP-VVerssionn Sttatuus-CCodee Reeasoon-PPhraase CRLLF其中中,HTTTP-VVerssionn表示服服务器HTTTP协议的的版本;Staatuss-Coode表示服服务器发发回的响响应状态态代码;Reaasonn-Phhrasse表示状状态代码码的文本本描述。状态代代码有三三位数字字组成,第一个个数字定定义了响响应的类类别,且且有五种种可能取取值:11xx:指示示信息-表示请请求已接接收,继继续处理理2xx:成功-表示请请求已被被成功接接收、理理解、接接受3xxx:重定定向-要完成成请求必必须进行行更进一一步的操操作4xxx:客户户端错误误-请求有有语法错错误或请请求无法法实现55xx:服务务器端错错误-服务器器未能实实现合法法的请求求常见状状态代码码、状态态描述、说明:2000 OKK /客户端端请求成成功4000 BBad Reqquesst /客户端端请求有有语法错错误,不不能被服服务器所所理解4401 Unaauthhoriizedd /请求未未经授权权,这个个状态代代码必须须和ticcatee报 /头域一一起使用用4033 Foorbiiddeen /服务器器收到请请求,但但是拒绝绝提供服服务4004 NNot Fouund /请求资资源不存存在,eg:输入入了错误误的URLL5000 Innterrnall Seerveer EErroor /服务器器发生不不可预期期的错误误5033 Seerveer UUnavvaillablle /服务器器当前不不能处理理客户端端的请求求,一段段时间后后, /可能恢复复正常eeg:HTTTP/11.1 2000 OKK(CRLLF)2、响应应报头后后述3、响应应正文就就是服务务器返回回的资源源的内容容四,HTTTP协议详详解之消消息报头头篇HTTPP消息由由客户端端到服务务器的请请求和服服务器到到客户端端的响应应组成。请求消消息和响响应消息息都是由由开始行行(对于于请求消消息,开开始行就就是请求求行,对对于响应应消息,开始行行就是状状态行),消息息报头(可选),空行行(只有有CRLLF的行),消息正正文(可可选)组组成。HTTPP消息报报头包括括普通报报头、请请求报头头、响应应报头、实体报报头。每每一个报报头域都都是由名名字+“:”+空格+值组成,消息报报头域的的名字是是大小写写无关的的。1、普通通报头在在普通报报头中,有少数数报头域域用于所所有的请请求和响响应消息息,但并并不用于于被传输输的实体体,只用用于传输输的消息息。eg:Cacche-Conntrool 用于指指定缓存存指令,缓存指指令是单单向的(响应中中出现的的缓存指指令在请请求中未未必会出出现),且是独独立的(一个消消息的缓缓存指令令不会影影响另一一个消息息处理的的缓存机机制),HTTTP1.0使用的的类似的的报头域域为Praagmaa。请求时时的缓存存指令包包括:no-cacche(用于于指示请请求或响响应消息息不能缓缓存)、no-stoore、maxx-agge、maxx-sttalee、minn-frreshh、onlyy-iff-caacheed;响响应时的的缓存指指令包括括:pubblicc、priivatte、no-cacche、no-stoore、no-traansfformm、musst-rrevaaliddatee、prooxy-revvaliidatte、maxx-agge、s-mmaxaage.eg:为了了指示IE浏览器(客户端端)不要要缓存页页面,服服务器端端的JSP程序可可以编写写如下:ressponnse.sehhHeaaderr("CCachhe-CConttroll",""no-cacche"");/reespoonsee.seetHeeadeer(""Praagmaa",""no-cacche"");作用相相当于上上述代码码,通常常两者/合用这句句代码将将在发送送的响应应消息中中设置普普通报头头域:Cacche-Conntrool:nno-ccachheDatee普通报报头域表表示消息息产生的的日期和和时间Connnecttionn普通报报头域允允许发送送指定连连接的选选项。例例如指定定连接是是连续,或者指指定“cloose”选项,通知服服务器,在响应应完成后后,关闭闭连接2、请求求报头请请求报头头允许客客户端向向服务器器端传递递请求的的附加信信息以及及客户端端自身的的信息。常用的的请求报报头AcccepptAccceppt请求报报头域用用于指定定客户端端接受哪哪些类型型的信息息。eg:Accceptt:imaage/gif,表明明客户端端希望接接受GIF图象格格式的资资源;Accceptt:texxt/hhtmll,表明明客户端端希望接接受htmml文本。Accceptt-ChharssetAAcceept-Chaarseet请求报报头域用用于指定定客户端端接受的的字符集集。eg:Accceptt-Chharsset:isoo-88859-1,ggb23312.如果在在请求消消息中没没有设置置这个域域,缺省省是任何何字符集集都可以以接受。Accceptt-EnncoddinggAccceptt-Enncoddingg请求报报头域类类似于Accceptt,但是是它是用用于指定定可接受受的内容容编码。eg:Accceptt-Enncoddingg:gzzip.defflatte.如果请请求消息息中没有有设置这这个域服服务器假假定客户户端对各各种内容容编码都都可以接接受。AAcceept-LannguaageAAcceept-Lannguaage请求报报头域类类似于Accceptt,但是是它是用用于指定定一种自自然语言言。eg:Accceptt-Laanguuagee:zhh-cnn.如果果请求消消息中没没有设置置这个报报头域,服务器器假定客客户端对对各种语语言都可可以接受受。AuuthoorizzatiionAAuthhoriizattionn请求报报头域主主要用于于证明客客户端有有权查看看某个资资源。当当浏览器器访问一一个页面面时,如如果收到到服务器器的响应应代码为为401(未授授权),可以发发送一个个包含Autthorrizaatioon请求报报头域的的请求,要求服服务器对对其进行行验证。Hosst(发送送请求时时,该报报头域是是必需的的)Hoost请求报报头域主主要用于于指定被被请求资资源的Intternnet主机和和端口号号,它通通常从HTTTP UURL中提取取出来的的,eg:我们在在浏览器器中输入入:httpp:/浏览器器发送的的请求消消息中,就会包包含Hosst请求报报头域,如下:Hosst:此处使使用缺省省端口号号80,若指指定了端端口号,则变成成:Hosst:n:指定端端口号UUserr-Aggentt我们上网网登陆论论坛的时时候,往往往会看看到一些些欢迎信信息,其其中列出出了你的的操作系系统的名名称和版版本,你你所使用用的浏览览器的名名称和版版本,这这往往让让很多人人感到很很神奇,实际上,服服务器应应用程序序就是从从Useer-AAgennt这个请请求报头头域中获获取到这这些信息息。Userr-Aggentt请求报报头域允允许客户户端将它它的操作作系统、浏览器器和其它它属性告告诉服务务器。不不过,这这个报头头域不是是必需的的,如果果我们自自己编写写一个浏浏览器,不使用用Useer-AAgennt请求报报头域,那么服服务器端端就无法法得知我我们的信信息了。请求求报头举举例:GGET /foorm.htmml HHTTPP/1.1 (CRLLF)AAcceept:imaage/giff,immagee/x-xbiitmaap,iimagge/jjpegg,apppliicattionn/x-shoockwwavee-fllashh,apppliicattionn/vnnd.mms-eexceel,aappllicaatioon/vvnd.ms-powwerppoinnt,aappllicaatioon/mmswoord,*/* (CCRLFF)Accceppt-LLangguagge:zzh-ccn (CRLLF)AAcceept-Enccodiing:gziip,ddefllatee (CCRLFF)Iff-Moodiffiedd-Siincee:Weed,005 JJan 20007 111:221:225 GGMT (CRRLF)If-Nonne-MMatcch:WW/"880b11a4cc0188f3cc41:83117" (CRRLF)Useer-AAgennt:MMoziillaa/4.0(ccomppatiiblee;MSSIE66.0;Winndowws NNT 55.0) (CCRLFF)Hoost: (CCRLFF)Coonneectiion:Keeep-AAlivve (CRLLF)(CRLLF)3、响应应报头响响应报头头允许服服务器传传递不能能放在状状态行中中的附加加响应信信息,以以及关于于服务器器的信息息和对Reqquesst-UURI所标识识的资源源进行下下一步访访问的信信息。常常用的响响应报头头LoccatiionLLocaatioon响应报报头域用用于重定定向接受受者到一一个新的的位置。Loccatiion响应报报头域常常用在更更换域名名的时候候。SeerveerSeerveer响应报报头域包包含了服服务器用用来处理理请求的的软件信信息。与与Useer-AAgennt请求报报头域是是相对应应的。下下面是SServver响应报头头域的一一个例子子:Seerveer:Apaachee-Cooyotte/11.1ee响应报报头域必必须被包包含在401(未授授权的)响应消消息中,客户端端收到401响应消消息时候候,并发发送Autthorrizaatioon报头域域请求服服务器对对其进行行验证时时,服务务端响应应报头就就包含该该报头域域。eg: reealmm="BBasiic AAuthh Teest!" /可以看看出服务务器对请请求资源源采用的的是基本本验证机机制。4、实体体报头请请求和响响应消息息都可以以传送一一个实体体。一个个实体由由实体报报头域和和实体正正文组成成,但并并不是说说实体报报头域和和实体正正文要在在一起发发送,可可以只发发送实体体报头域域。实体体报头定定义了关关于实体体正文(eg:有无无实体正正文)和和请求所所标识的的资源的的元信息息。常用用的实体体报头CConttentt-EnncoddinggConntennt- Enccodiing实体报报头域被被用作媒媒体类型型的修饰饰符,它它的值指指示了已已经被应应用到实实体正文文的附加加内容的的编码,因而要要获得Conntennt-TTypee报头域域中所引用的的媒体类类型,必必须采用用相应的的解码机机制。Conntennt-EEncoodinng这样用用于记录录文档的的压缩方方法,eg:Conttentt- EEncoodinng:gziipCoonteent-LannguaageCConttentt-Laanguuagee实体报报头域描描述了资资源所用用的自然然语言。没有设设置该域域则认为为实体内内容将提提供给所所有的语语言阅读读者。eg:Conntennt-LLangguagge:ddaCoonteent-LenngthhConntennt-LLenggth实体报报头域用用于指明明实体正正文的长长度,以以字节方方式存储储的十进进制数字字来表示示。Coonteent-TyppeCoonteent-Typpe实体报报头域用用语指明明发送给给接收者者的实体体正文的的媒体类类型。eg:Conntennt-TTypee:teext/htmml;ccharrsett=ISSO-888599-1CConttentt-Tyype:texxt/hhtmll;chharsset=GB223122Lasst-MModiifieedLaast-Moddifiied实体报报头域用用于指示示资源的的最后修修改日期期和时间间。ExxpirresEExpiiress实体报报头域给给出响应应过期的的日期和和时间。为了让让代理服服务器或或浏览器器在一段段时间以以后更新新缓存中中(再次访访问曾访访问过的的页面时时,直接接从缓存存中加载载,缩短短响应时时间和降低服服务器负负载)的页面面,我们们可以使使用Exppirees实体报报头域指指定页面面过期的的时间。eg:Exppirees:Thu,15 Sepp 20006 16:23:12 GMTTHTTTP1.1的客户户端和缓缓存必须须将其他他非法的的日期格格式(包包括0)看作作已经过过期。eg:为了了让浏览览器不要要缓存页页面,我我们也可可以利用用Exppirees实体报报头域,设置为为0,jsp中程序序如下:ressponnse.settDatteHeeadeer(""Exppirees","0"");五,利用用tellnett观察htttp协议的的通讯过过程实验目的的及原理理:利用MS的tellnett工具,通过手手动输入入http请求信信息的方方式,向向服务器器发出请请求,服服务器接接收、解解释和接接受请求求后,会会返回一一个响应应,该响响应会在tellnett窗口上上显示出出来,从从而从感感性上加加深对htttp协议的的通讯过过程的认认识。实验步骤骤:1、打开开tellnett1.11打开tellnett运行->>cmdd->>tellnett1.2打打开tellnett回显功功能seet llocaaleccho2、连接接服务器器并发送送请求22.1 opeen 80 /注意端端口号不不能省略略 HEAAD /inddex.aspp HTTTP/1.00 Hoost: /*我们可可以变换换请求方方法,请求桂桂林电子子主页内内容,输入消消息如下下*/ oopenn 880 GETT /iindeex.aasp HTTTP/11.0 /请求资资源的内内容 HHostt: 2.2 opeen 80 /在命令令提示符符号下直直接输入入tellnett 880 HHEADD /iindeex.aasp HTTTP/11.0 Hosst: 3实验结结果:3.1请请求信息息2.1得到的的响应是:HTTPP/1.1 2200 OK /请求成成功Seerveer: Miccrossoftt-IIIS/55.0 /weeb服务器器Datte: Thuu,088 Maar 22007707:17:51 GMTTConnnecctioon: Keeep-AAlivve Coonteent-Lenngthh: 2233330Conttentt-Tyype: teext/htmmlExxpriies: Thhu,008 MMar 20007 007:116:551 GGMTSSet-Coookiee: AASPSSESSSIONNIDQQAQBBQQQQB=BBEJCCDGKKADEEDJKKLKKKAJEEOIMMMH; paath=/Caachee-coontrrol: prrivaate/资源源内容省省略3.2请请求信息息2.2得到的的响应是是:HTTPP/1.0 4404 Nott Fooundd /请求失败败Datte: Thuu, 008 MMar 20007 007:550:550 GGMTSServver: Appachhe/22.0.54 <Unnix>>Lasst-MModiifieed: Thuu, 330 NNov 20006 111:335:441 GGMTEETagg: ""62777a-4155-e77c7669800"Accceppt-RRangges: byytessX-PPoweeredd-Byy: mmod_xlaayouut_jjh/00.0.1vhhs.mmarkkII.remmixVVaryy: AAcceept-EnccodiingCConttentt-Tyype: teext/htmmlX-Cacche: MIISS froom zzjm1152-VVia: 1.0 zzjm1152-:80<<squuid/2.66.STTABLLES-2000612207>>X-CCachhe: MISSS ffromm thh-1443.ssinaa.coom.ccnCoonneectiion: cllosee失去了跟跟主机的的连接按任意键键继续.4 .注注意事项项:1、出现现输入错错误,则则请求不不会成功功。 22、报头头域不分分大小写写。 33、更深深一步了了解HTTTP协议,可可以查看看RFCC26116,在c上找到到该文件件。 4、开发发后台程程序必须须掌握htttp协议