HTTP协议 2.HTTP协议.doc_第1页
HTTP协议 2.HTTP协议.doc_第2页
HTTP协议 2.HTTP协议.doc_第3页
HTTP协议 2.HTTP协议.doc_第4页
HTTP协议 2.HTTP协议.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2、HTTP协议浏览器上网浏览网页,其原理也同属于上部分所描述的网络应用程序,浏览器就是客户端程序,网站服务器就是服务器程序,其占用80端口。当客户端程序访问网站时,在原理上就是访问服务器的80端口,浏览器和服务器交换数据的协议为HTTP协议,其原理就是发送请求、接收数据,而且数据都是文本形式传送的。在介绍HTTP协议前,请下载并安装工具:HttpWatch,执行Setup.exe后,从桌面上启动HttpWatch Studio,点菜单文件-打开选择httpwatch.lic完成注册。安装完毕后,打开IE浏览器,点菜单查看=浏览器栏=httpwatch如下图:这时IE浏览器的下方将出现两个框架的窗口,每一行都代表浏览器和服务器的一次交互,下面左边是发出的数据,右边是接收到的数据:其它选项都是以此为基础进行整理便于阅读,后续开发过程务必注意必须以这里的流部分数据为准。请务必保持安装MASTUDIO开发群里的HttpWatch的版本,这对于后续请求技术支持提供问题数据有着重要的作用,在后续遇到问题的时候,只需要将浏览的过程保存为.hwl文件发送给MAS技术支持即可,同版本可交互方便。通过HttpWatch来观察浏览器和服务器的交互过程,可以更好的理解和分析HTTP协议,下面依据HTTP发展来依次介绍:21、GET协议当用户在浏览器把输入网址:/index.asp时,浏览器对网址进行拆分,为和/index.asp两部分,然后形成如下格式的数据包:GET/index.aspHTTP/1.1Host:Accept:text/*User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)Cookie: ASP.NET_SessionId=iayjigr33x5zqb45m2xeya3p; path=/Cookie: iofficelanguage=language=zh-cn; expires=Fri, 31-Dec-9999 23:59:59 GMT所有协议数据包都是文本字符串的形式,每行文本通过rn分开,最后一行有2个rn表示协议结束。第一行以GET开头,表示向服务器请求其后的目标/index.asp,请求的协议版本为HTTP/1.1,目标就是从网址中拆出来。第二行Host表示请求的服务器域名为,也是从网址中拆出来。第三行Accept表示浏览器接收服务器反馈数据的格式,text/*表示接收所有文本形式的反馈数据。第四行User-Agent表示浏览器的标别,IE浏览器和Firfox浏览器各有不同。第五行和第六行是Cookie,这个字段在下面另行描述。WEB服务器接收到如上所描述数据包后,会返回如下格式的数据,其中往下是我们可以在浏览器里通过查看源代码获取到,浏览器在整个和WEB服务器的交互过程中都隐藏了头部分,它们是事实存在而且很重要。HTTP/1.1200OKDate: Wed, 30 Apr 2008 02:27:01 GMTServer: Microsoft-IIS/6.0Content-Type: text/html; charset=gb2312Content-Length: 9584欢迎浏览前面部分是HTTP协议的头,下面则是正文HTML代码,中间通过2个rn分开。首先看头部分:第一行表示返回的状态代码为200状态意义为OK。第二行表示返回数据的时间。第三行表示服务器的标识,如果IIS或者APACHE第四行表示返回内容的类型和编码,这里表示返回GB2312编码的文本。第五行表示返回数据的长度,也就是下面从开始到结束部分的总长度。最下面部分的数据就是HTML代码,浏览器通过HTML代码进行显示页面。22、POST协议当浏览器上显示输入表单,输入数据提交给服务器则和GET有所区别,假设有个表单形式如下图所示:表单的代码如下,其有2个字段分别为szName、szAge,用户输入后提交给服务器这2个字段的内容。姓名:p年龄:当用户输入数据后按下提交按钮则系统将szName和szAge数据提交给目标/save.asp进行处理,处理完成系统再返回结果。当用户输入数据点提交后浏览器形成如下格式的数据包,发送给服务器:POST/save.aspHTTP/1.1Host:Accept:text/*User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)Cookie: upNum=0; path=/Content-Length:20szName=mas&szAge=123第一行POST表示向目标/save.asp发送数据,采用HTTP/1.1协议。第二行Host表示域名为第三行Accept表示接收返回的数据格式。第四行User-Agent表示浏览器的识别。第五行Cookie下篇介绍第六行Content-Length表示下面提交的数据流的长度,也就是szName=mas&szAge=123的长度。WEB服务器收到如上的数据包后,其由目标/save.asp进行数据接收和处理,处理后返回如下:HTTP/1.1 200 OKDate: Wed, 30 Apr 2008 02:26:59 GMTContent-Length: 10238Content-Type: text/html填写登录信息中高移动互联论坛MAStudio.前面部分是HTTP协议的头,下面则是正文HTML代码,中间通过2个rn分开。首先看头部分:第一行表示返回的状态代码为200状态意义为OK。第二行表示返回数据的时间。第三行表示返回数据的长度。第四行表示返回内容的类型。返回的数据也就是下面从开始到结束部分的总长度,下面部分的数据就是HTML代码,浏览器通过HTML代码进行显示页面。23、Cookie协议以上两部分是HTTP的基础协议,完成基本的请求数据、发送数据操作。由于浏览器和服务器之间建立的网络连接是完成即断开的模式,也就是浏览器在访问一个URL的时候,其从发出网络连接发出请求数据接收返回数据断开网络连接,即为结束。当一个网页包含有很多图片的时候,浏览器则重复以上动作很多次来完成。由于这样的机制导致了服务器在接收到请求后,其不知道是谁发送请求数据,也就是无法针对多用户的情况来区分每一个用户。在于需要给予权限来访问的页面则依靠前面的GET和POST是很难实现的,这就引入了Cookie机制。一个Cookie其有4个属性组成,分别为所在域名、有效期、名字、值。由服务器发送给浏览器,浏览器接收后将其保存到本地硬盘中,在后续的访问其它网址过程中,每次都把这个Cookie一起提交给服务器,服务器也就依据此来判断访问者的身份了。例如登陆到/sample/login.asp,输入用户名和密码后,服务器会发送一个Cookie到浏览器来表示是否登陆成功。例如发送的数据包格式如下提交给服务器用户名和密码:POST /sample/login.asp HTTP/1.1Host:Content-Length:20szName=mas&szPwd=123服务器处理返回数据,其中Set-Cookie字段表示服务器给予此用户分配一个Cookie,其名字为AuthID值为S4JK495JKJFGNNNK,浏览器并将其保存到本地硬盘中,那么本地浏览器就是保存了一个在域名,有效期不限、名字为AuthID、值为S4JK495JKJFGNNNK的Cookie。HTTP/1.1 200 OKDate: Wed, 30 Apr 2008 02:26:59 GMTContent-Length: 10238Content-Type: text/htmlSet-Cookie: AuthID= S4JK495JKJFGNNNK填写登录信息中高移动互联论坛MAStudio.登陆成功获取到Cookie后,后续访问所有同域名的网址,浏览器都会把上面获取到的Cookie一起提交给服务器,来表明自己的身份。比如访问/sample/getgrid.asp地址,发出的数据包格式为:GET /sample/getgrid.asp HTTP/1.1Host:Accept:text/*User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)Cookie: AuthID=S4JK495JKJFGNNNK这里最后一行Cookie则把前面获取到Cookie的名字和值发送给服务器,服务器依据此则可以判断出用户是否已经登陆成功。24、编码A、ASCII我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。B、GB2312字符必须编码后才能被计算机处理,计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。从ASCII、GB2312、这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理,区分中文编码的方法是高字节的最高位不为0。C、UNICODE是一个字符集,其在于包含世界上所有文字和符号的编码,其中中、日、韩的三种文字占用了Unicode中0x3000到0x9FFF的部分,Unicode目前普遍采用的是UCS-2,即用两个字节来编码一个字符,比如汉字经的编码是0x7ECF。注意字符编码一般用十六进制来表示,为了与十进制区分,十六进制以0x开头,0x7ECF转换成十进制就是32463。UCS-2用两个字节来编码字符,两个字节就是16位二进制,2的16次方等于65536,所以UCS-2最多能编码65536个字符。编码从0到127的字符与ASCII编码的字符一样,比如字母a的Unicode编码是0x0061,十进制是97,而a的ASCII编码是0x61,十进制也是97。对于汉字的编码,事实上Unicode对汉字支持不怎么好,这也是没办法的,简体和繁体总共有六七万个汉字,而UCS-2最多能表示65536个,才六万多个,所以Unicode只能排除一些几乎不用的汉字,好在常用的简体汉字也不过七千多个,为了能表示所有汉字,Unicode也有UCS-4规范,就是用4个字节来编码字符,不过现在普遍采用的还是UCS-2,只用两个字节来编码。D、UTF-8互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用14个字节表示一个符号,根据不同的符号而变化字节长度。UTF-8的编码规则很简单,只有二条: 1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。 2)对于n字节的符号(n1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。下表总结了编码规则,字母x表示可用编码的位。 -Unicode符号范围 | UTF-8编码方式 (十六进制) | (二进制) -+-一0000 0000-0000 007F | 0xxxxxxx二0000 0080-0000 07FF | 110xxxxx 10xxxxxx三0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx四0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx-下面还是以汉字“严”为例,演示如何实现UTF-8编码。根据字符编码表“严”的unicode是0X4E25(10011000100101),根据上表对应,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此“严”的UTF-8编码需要三个字节,即格式是“1110xxxx 10xxxxxx 10xxxxxx”。然后,从“严”的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0,这样就得到了,“严”的UTF-8编码是“11100100 10111000 10100101”,转换成十六进制就是E4B8A5。E、编码应用以上介绍的编码在HTTP协议中有着广泛的应用,在试图明确这个问题之前,可以先到百度和谷歌搜索一下同一个关键词。如搜索“一级棒”:百度搜索里输入上面的关键字,URL里显示的是:http: //s?wd=%D2%BB%BC%B6%B0%F4谷歌搜索里输入上面的关键字,URL里则显示的是:http: //search?hl=zh-CN&q=%E4%B8%80%E7%BA%A7%E6%A3%92一级棒合并起来加上%符号GB2312D2BBBCB6B0F4%D2%BB%BC%B6%B0%F4UTF-8E4B880E7BAA7E6A392%E4%B8%80%E7%BA%A7%E6%A3%92通过以上表格可以看出HTTP协议中使用的GB2312编码以及UTF-8编码的形式,对于汉字,一般性的%xx%yy由2位%形式组成的则为GB2312编码,由%xx%yy%zz形式组成的则为UTF-8编码。“你好”的编码形式为:GB2312编码%C4%E3%BA%C3UTF-8编码%E4%BD%A0%E5%A5%BDUNICODE编码%u4f60%u597dUTF-8编码浣犲“你好”的UTF8编码形式在URL里%E4%BD%A0%E5%A5%BD形式,而在UTF8的文字形式采用写字板打开查看则是“浣犲”的形式。通过本段分析,可以对于HTTP协议中所有的编码进行分析。以上编码在GET的应用如下所示范,其中目标中%C4%E3%BA%C3为编码后的字符串,所以在访问一个Url的时候,必须通过HttpWatch才可以准确的看出系统所采用的编码以及形式。GET/index.asp?xyz=%C4%E3%BA%C3HTTP/1.1Host:Accept:text/*User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)以上编码在POST的应用如下所示范,其中提交的数据部分字段szName的值%E4%BD%A0%E5%A5%BD为编码后的值,一般性POST提交的数据均会进行编码传送。POST /forum/login.asp HTTP/1.1Host:Accept:text/*Content-Length:20szName=%E4%BD%A0%E5%A5%BD&szAge=12325、二进制当从网站上下载文件的时候,其也是HTTP协议进行传送,例如当下载http:/www.masuite/download/中高平台.rar文件的时候,浏览器发出的GET的数据包格式如下:GET/download/%E4%B8%AD%E9%AB%98%E5%B9%B3%E5%8F%B0.rarHTTP/1.1Accept: image/gif, image/x-xbitmap, */*Accept-Language: zh-cnUA-CPU: x86Accept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)Host:Connection: Keep-Alive注意看文件名中高平台.rar被编码后为GB2312的形式如下:%E4%B8%AD%E9%AB%98%E5%B9%B3%E5%8F%B0.rar服务器找到文件后返回如下的头部分和文件二进制流:HTTP/1.1 200 OKDate: Mon, 26 Jan 2009 12:30:37 GMTContent-Length: 871Content-Type: application/octet-streamContent-Location: /download/%E4%B8%AD%E9%AB%98%E5%B9%B3%E5%8F%B0.rarLast-Modified: Mon, 26 Jan 2009 12:28:19 GMTAccept-Ranges: bytesETag: 86ffe691b17fc91:24cfServer: Microsoft-IIS/6.0X-Powered-By: ASP.NET头部分Content-Length: 871表示返回的文件长度为871,Content-Type: application/octet-stream表示返回的类型为流数据包。当需要向网站上传文件的时候,浏览器发出POST的数据包格式,将文件内容作为数据包一部分持续上传到服务器,其中每个字段都通过boundary属性将分开:POST /general/email/new/submit.php HTTP/1.1Accept:image/jpeg, application/vnd.ms-excel, application/msword, application/x-silverlight, */*Accept-Language: zh-cnContent-Type: multipart/form-data;boundary=-7d919b5160222Accept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)Host: Content-Length:69697Cookie: mytable_notify_2=de28dadd; PHPSESSID=7cde0337205f1709a3686dd2e52ab326;-7d919b5160222Content-Disposition: form-data; name=TO_IDchr,-7d919b5160222Content-Disposition: form-data; name=TO_NAME陈然,-7d919b5160222Content-Disposition: form-data; name=SUBJECTtest-7d919b5160222Content-Disposition: form-data; name=CONTENTtest-7d919b5160222Content-Disposition: form-data; name=ATTACHMENT_1; filename=Content-Type: application/octet-stream-7d919b5160222Content-Disposition: form-data; name=ATTACHMENT_0; filename=D:Documents and Settingsbailu桌面szvc.rarContent-Type: application/octet-streamRar!。文件的二进制数据。最后一个字段名为ATTACHMENT_0,其包含的文件为D:Documents and Settingsbailu桌面szvc.rar,将其上传到文件上去。26、转发当访问网址/mail/webmail/mb_login.php的时候,系统会自动导向到新的URL,这就被称为重定向。例如系统发送出如下的POST数据格式:POST /mail/webmail/mb_login.php HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, application/x-silverlight, */*Referer: /mail/postoffice/login.phpAccept-Language: zh-cnContent-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)Host: Content-Lengt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论