HTTP学习

来源:互联网 发布:java考试题 编辑:程序博客网 时间:2024/05/22 04:31

--------------------------------------------------- HTTP协议-----------------------------------------------------

Web浏览器与Web服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议

HTTP HyperText Transfer Protocol 超文本传输协议,是TCP/IP中的应用层的协议

使用消息头,可以实现HTTP客户机与服务器之间的请求与应答,

消息头相当于服务器与浏览器之间的一些暗号指令

使用消息头编程,可以查看所有人通过什么网站途径访问我的网站,例如从google搜索登陆网站,从某一些广告链接进入等

HTTP消息头可以分为通用信息头,请求头,响应头,实体头等四类

 

使用telnet命令链接tomcat服务器 进行一次请求

启动bin目录下的tomcat服务器 打开一个cmd窗口

telnet localhost 8008    8008是本机设置的tomcat端口 依照自己的端口而定

回车后 输入 ctrl + ](中括号)  在回车 就可以打开本地的写入功能  又称为本地回显

协议版本为1.0

GET /test.html HTTP/1.0 两次回车

协议版本为1.1

GET /test.html HTTP/1.0 一次回车

在输入Hpst              需要定义一个头字段可以为空 可以输入网站的主机名

 

HTTP/1.0协议在发送请求后立即断开,而HTTP/1.1协议在发送请求后还可以继续发送请求,而延迟过长后才会自动断开

使用GETPOST方式传递参数

URL后边可以附加一些参数

例如:http://www.123.com/test/paramtest?param1=abc&param2=xyz

GET方式

格式:

GET /test/paramtest?param1=abc&param2=xyzHTTP/1.1

Host:

特点:传送的数据量有限制,一般在1KB以下,可以显示参数

POST方式

格式:

POST /test/paramtest HTTP/1.1

Host:

Content-Type:application/x-www-form-urtencoded

Content-Length:28

param1=abc&param2=xyz

post也可以按照get的请求方式来传递参数

特点:由于POST方式将参数作为请求消息的实体内容进行传输,传送的数据量要比GET方式传送的数据量大得多,隐藏显示参数

开启tomcat服务器,可以在tomcat主页上练习

http://localhost:8008/servlets-examples/servlet/RequestParamExample

可以把此页面保存为本地html,要注意设置表单action元素的路径

参见RequestParamExample.htm文件

使用telnet测试时,如果使用POST请求最好先将命令放到txt文本中,在将每句复制进去

响应状态码

响应状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数,响应状态码可归为5种类别,使用最高位为15来进行分类

第一类:100-199

表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

第二类:200-299

表示成功接收请求并已完成整个处理过程

第三类:300-399

为完成请求,客户需进一步细化请求,例如,请求的资源已经移动一个新地址

第四类:400-499

客户端的请求有错误

第五类:500-599

服务器端出现错误

部分常用的响应状态码

100 Continue:初始的请求已经接受,客户应当继续发送请求的其余部分。

101 Switching Protocols:服务器将遵从客户的请求转换到另外一种协议。

200 OK:一切正常,对GETPOST请求的应答文档跟在后面。如果不用SetStatus设置状态代码,Servlet默认使用202状态代码。

201 Created 服务器已经创建了文档,Location头给出了它的URL

202 Accepted:已经接受请求,但处理尚未完成。

203 Non-Authoritative Information:文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。

  204 No Content:没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。

  205 Reset Content:没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。

  206 Partial Content:客户发送了一个带有Range头的GET请求(要求服务器只返回文档中的部分内容),服务器完成了它。

  300 Multiple Choices:客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。

  301 Moved Permanently:客户请求的文档在其他地方,新的URLLocation头中给出,浏览器应该自动地访问新的URL

  302 Found:类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”,而HttpServletResponse中相应的常量是SC_MOVED_TEMPORARILY,而不是 SC_FOUND。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。为此,Servlet提供了一个专用的方法,即 sendRedirect。使用response.sendRedirecturl)比使用 response.setStatusresponse.SC_MOVED_TEMPORARILY)和 response.setHeader"Location"url)更好。注意这个状态代码有时候可以和301替换使用。  

  303 See Other:类似于301/302,不同之处在于,如果原来的请求是POSTLocation头指定的重定向目标文档应该通过GET提取。

  304 Not Modified:客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

  305 Use Proxy:客户请求的文档应该通过Location头所指明的代理服务器提取。

  307 Temporary Redirect:和302Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请 求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GETPOST请求如果是307应答,则浏览器只能跟随对GET请求的重定向。注意:HttpServletResponse中没有为该状态代码提供相应的常量。302/307临时重定向,被请求的文档已被临时移动到别处,此文档的新的URLLocation响应头中给出

  400 Bad Request:请求出现语法错误。

  401 Unauthorized:客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。

  403 Forbidden:资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。

  404 Not Found:无法找到指定位置的资源。这也是一个常用的应答,表示服务器上不存在客户机所请求的资源,HttpServletResponse专门提供了相应的方法:sendErrormessage)。

  405 Method Not Allowed:请求方法(GETPOSTHEADDELETEPUTTRACE等)对指定的资源不适用。

  406 Not Acceptable:指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容。

  407 Proxy Authentication Required:类似于401,表示客户必须先经过代理服务器的授权。

  408 Request Timeout:在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。

  409 Conflict:通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。

  410 Gone:所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。

  411 Length Required:服务器不能处理请求,除非客户发送一个Content-Length头。

  412 Precondition Failed:请求头中指定的一些前提条件失败。

  413 Request Entity Too Large:目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头。

  414 Request URI Too LongURI太长。

  416 Requested Range Not Satisfiable:服务器不能满足客户在请求中指定的Range头。

  500 Internal Server Error:服务器内部遇到了意料不到的情况,不能完成客户的请求,CGIASPJSP等程序发生错误。

  501 Not Implemented:服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。

  502 Bad Gateway:服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。

  503 Service Unavailable:服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。

  504 Gateway Timeout:由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。

  505 HTTP Version Not Supported:服务器不支持请求中所指明的HTTP版本。

通用信息头

通用信息头字段既可用于请求信息,也能用于响应信息,它包括一些与被传输的实体内容没有关系的常用消息头字段

Cache-Control:no-cache-----------如果用于客户机发出的请求消息中,作用是去通知位于客户机与服务器之间的代理服务器如何去处理缓存。如果用于服务器返回的响应消息中,可以通知客户机或者是代理服务器如何缓存当前的响应消息

Cache-Control头字段有很多设置值

no-chache的作用是告诉客户机和代理服务器不要缓存当前的响应消息,在一些情况下是非常有用的

 

Connection:close---------用于指定处理完本次请求和响应之后客户端与服务器之间是否还要继续保持连接

Connection的值设置为close的时候,这个客户端就是通知服务器返回本次结果以后,一起关闭连接

Connection的值设置为Keep-Alive的时候,客户端通知服务器返回本次请求结果后,继续保持链接

HTTP/1.1的协议,Connection默认保持持久连接的

 

Date:Wed,12 Aug 200920:43:45 GMT------------用于表示HTTP消息产生时的时间,Date头字段中的设置值必须是GMT的时间格式,服务器返回的正常响应消息中应该总是包含Date头字段

 

Pragma:no-cache---------------Pragma的设置值只能固定为no-cache,是在HTTP/1.0协议当中支持客户端不要缓存当前的响应消息

HTTP/1,1当中,使用no-cacheCache-Contro头字段的设置值比no-cachePragma头字段的设置值更为可靠的一种方式

 

Trailer:Date------------用于指示实体消息的后边可以出现哪些头字段

HTTP消息完整格式中,头字段位于消息实体内容的前边,有时候也可以将头字段位于消息实体内容的后边,对于要放到后边的头字段就要使用Trailer头字段来说明

 

Content-Length:28----------表示要传输的参数的长度

Transfer-Encoding:chunked-----------用于指定HTTP传输编码方式

设置值为chunked这种方式表示是要把整个HTTP响应消息的实体内容分成若干段以后,在进行传输,且在每个分段的开始部分,都要使用一个16进制格式的数字来表示即将传输的分段大小,最后的一个分段的大小必须是0,这个0就用于表示整个chunked编码的数据结束了

服务器端程序向客户端发送响应消息的时候,不是把一个一个的字符直接发送给客户端,而是要先把发送给客户端的实体内容写入到一个缓冲区当中,当缓冲区中的内容被写满时,服务器就会将缓冲区中的内容集中发送给客户端,然后将剩下的响应消息内容继续写入到刚才腾空的缓冲区当中,如果缓冲区当中已经写入了所有的响应内容,即使缓冲区还没有被填满,服务器也会将缓冲区中的内容集中发送给客户端

如果在第一次写缓冲区的时候,就已经将响应消息的所有实体内容都写入到了缓冲区当中,显然,服务器在第一次提交缓冲区内容的时候,就可以知道整个实体内容的大小,这样就可以使用Content-Length头字段来指定实体内容的大小

当服务器程序填满了整个缓冲区,都还没有把所有的实体内容写完,这种情况下,就必须先发送缓冲区中的内容给客户端,腾空出缓冲区中的空间,继续向缓冲区中填写还没有发送给客户端中的实体内容,客户端程序在第一次将缓冲区的内容发送给客户端的时候,无法知道整个实体内容的大小,后边的数据还没有写入缓冲区,所以就只能将响应消息设置为Transfer-Encoding这种方式,将整个响应消息的内容分几段传输给客户端,在每一次传输的时候,是可以计算出缓冲区的内容当中的数据大小的,数据的大小以16进制的形式写在响应消息的前面

 

Upgrade:HTTP/2.0,SHTTP/1.3-------------允许客户端指定它所支持并希望将当前的协议所切换到的HTTP协议的版本,有客户端支持的HTTP/2.0的协议,并且希望服务器与它采用HTTP/2.0协议来进行通信

 

Via:HTTP/1.1Proxy1,HTTP/1.1 Proxy2-------------用于指定HTTP消息所途径的中间代理服务器的名称和所使用的协议,Via头字段是由代理服务器产生的,每个代理服务器必须把它的信息追加到Via头字段的最后,这样就可以反映出HTTP消息所途径的多个代理服务器的顺序

 

Warning:anytext---------用于说明其他头字段和状态码所不能够说明的一些附加的警告信息

请求头

请求头字段用于客户端在请求消息中向服务器传递附加消息,主要包括客户端可以接受的数据类型,压缩方法,语言,以及发出请求的超链接所属网页的URL地址等信息

Accept:text/html,image/*---------------用于指出客户端程序能够处理的MIME类型,

如果支持了Accept中定义的格式,就会产生这个格式的数据,传递给客户端

 

Accept-Charset:ISO-8859-1,unicode-1-1---------------用于指出客户端程序可以使用的字符集,

 

Accept-Encoding:gzip,compress--------------用于指定客户机能够进行解码的数据编码方式

这里的编码方式通常都是指某种压缩方式,在传输较大的实体内容之前,对实体内容进行压缩,节省网络带宽和传输时间,所以传输较大的实体内容的时候,就需要对该实体内容进行压缩编码

 

Accept-Language:en-gb,zh-cn-------------用于指定客户机希望服务器返回哪个国家的语言的文档,

 

Authorization:Basicenh4OjEyMzQ1Ng 

Expect:100-continue-----------用于指定客户机请求服务器采取特殊的行动,设置值为100-continue,目前只有这一种设置值,用于询问服务器是否可以在这个请求消息的后面在发送一个附加的文档

 

From:abc123@163.com-----------用于指定发送者的email地址

 

Host:www.123.com:80-------------用于指定客户端访问的资源所在的主机名和端口号

浏览器可以缓存服务器端访问的页面,当浏览器再次返回缓存的这个页面的时候,只有服务器端的内容确实已经更新,服务器才需要把网页的内容的重新传递给客户机,否则浏览器就可以使用上次缓存的内容,就可以减少一些不必要的网络传输流量,可以通过定义各种条件来判断服务器端的网页内容是否已经更新

服务器在传送给客户机网页文件内容的时候,就可以传送一些代表实体内容特征的头字段,这些头字段就被成为实体标签,当客户机再次向服务器请求网页文件内容的时候,它就可以使用if-Match:”xyzzy”,”r2d2xxxx”头字段来附带以前所缓存的实体标签内容,当服务器接收到if-Match的头字段信息以后,会比较这些实体标签内容是否与当前的网页内容的特征一致,如果两者相同的话,就表示网页内容没有更改,web服务器就不用重新向浏览器访问新的网页内容

 

Range:bytes=100-599--------------表示请求服务器访问文档中100599字节之间的内容,包括100599本身

Range:bytes=100-  -------------表示请求服务器访问文档中100字节之后的内容

Range:bytes=-100  -------------表示请求服务器访问文档中最后100字节的内容

 

Referer:http://www.123.com/index.jsp-------------查看用户是通过哪个网站上的超链接来导航进来的

 

TE:trailers,deflate-------------用于说明客户机可接受除了   之外的编码类型

 

User-Agent:Mozilla/4.0(compatible;MSIE5.5,Windows NT 5.0)-----------用于指定浏览器或者其他客户端程序的类型和名称,以便浏览器可以针对不同的浏览器而访问不同的内容

实体头

实体头用作实体内容的元信息,描述了实体内容的属性,包括实体信息类型,长度,压缩方法,最后一次修改时间,数据有效期等

Allow:GET,POST----------用于告诉浏览器一直以哪些请求方式来访问这个资源

 

Content-Encoding:gzip---------用于指定实体内容当前的压缩编码方式,

Content-Language:zh-cn------------用于指定服务器所返回的网页文档的国家语言类型

Content-Length:80-----------用于比较实体内容的大小,指定实体内容的长度

Content-Location:http://www.123.com/test.html---------用于指定响应消息中所封装的实体内容的实际位置,响应消息中的实体内容的位置就是请求资源的路径

 

Content-MD5:ABCDABCDABCDABCD------------用于指定对实体内容进行MD5摘要算法所算出的数字摘要的base64编码结果,以提供实体内容的完整性校验,如果服务器返回给浏览器的内容的完整性非常重要,浏览器虽然接收到了服务器返回的内容,但是不敢肯定服务器返回的内容在传输的过程中是否发生了损坏,就要利用数字摘要信息进行验证

MD5算法用于对信息进行不可逆的变化运算,

 

Content-Range:bytes2543-4532/7898-----------用于指定服务器返回的部分实体内容的位置信息,设置值的意思是,返回的数据大小是以byte为单位,内容从2543个字节开始,到4532个字节结束,7898表示实体内容的大小为7898个字节

 

Expires:Tue,14 Aug 200915:07:30 GMT------------用于指定当前文档应该在什么时候被认为过期,那时,浏览器就不能继续使用本地的缓存,而是在需要时向服务器发送新的访问请求

设置值必须是GMT格式

 

Last-Modified: Tue,14Aug 2009 15:07:30 GMT------------用于指定文档的最后编写时间

设置值的必须是GMT格式

 

Content-type:text/html;charset=GB2312--------------指出实体内容的MIME类型,在类型后边,还可以指定响应内容所使用的字符集编码

这个设置值就表示主类型为text,子类型为html,使用的字符集编码为国标2312

如果后边没有指定字符集编码,就默认为使用ISO-8859-1的英文字符集编码

浏览器通过检查服务器返回的响应消息的Content-type头字段中的MIME类型,可以知道实体所用的数据格式和知道要以何种方式来进行处理

 

Tomcat中的文件扩展名与MIME的映射关系

Tomcat通过在conf/web.xml文件中添加一个<mime-mapping>元素来实现设置

每一个<mime-mapping>元素都用于设置一种静态资源的MIME类型

<extension>子元素用于指定一个文件的扩展名

<mime-type>子元素用于指定文件扩展名所代表的静态资源的MIME类型,包括主类型和子类型,之间用/ 正斜杠进行分隔

 

扩展头

HTTP消息中,也可以使用一些在HTTP/1.1正式规范里没有定义的头字段,这些头字段统称为自定义的HTTP头或扩展头,他们通常被当作是一种实体头处理

流行的浏览器基本都支持CookieSet-CookieRefreshContent-Disposition等几个常用的扩展头字段

Refresh头字段-----------用于告诉浏览器多少秒后重新访问当前的URL地址

Refresh:1,url=http://www.123.com  1秒钟以后,重新访问这个地址的URL链接

 

Content-Disposition头字段-----------用于指定接受程序处理数据内容的方式

Content-Type:application/octet-stream

Content-Disposition:attachment;filename=aaa.zip

Filename参数是服务器建议浏览器将实体内容保存到一个文件中的时候,所采用的文件名

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

--------------------------------------------------------HTTP-----------------------------------------------------

REST对于信息的核心抽象是资源。任何能够被命名的信息都能够作为一个资源:一份文档或一张图片、一个暂时性的服务(例如,洛杉矶今日的天气)、一个其他资源的集合、一个非虚拟的对象(例如,人)等等。换句话说,任何可能作为一个创作者的超文本引用的目标的概念都必须符合资源的定义。一个资源是到一组实体的概念上的映射,而不是在任何特定时刻与该映射相关联的实体本身。
更精确地说,资源R是一个随时间变化的成员函数MR(t),该函数将时间t映射到等价的一个实体或值的集合,集合中的值可能是资源的表现和/或资源的标识符。一个资源可以映射到空集,这允许在一个概念的任何实现存在之前引用这个概念——这一观念对于Web之前的大多数超文本系统来说比较陌生。一些资源在它们被创建后的任何时刻来检查,它们都对应着相同的值的集合,从这个意义上说它们是静态的。其他的资源所对应的值则会随时间而频繁地变化。对于一个资源来说,唯一必须是静态的是映射的语义,因为语义才是区别资源的关键。

 

简而言之,资源是一个抽象的东西,而在具体资源访问时,会根据内容协商的结果表示成一个具体表述(Representations)。每个资源由统一的资源标识符(URI)来描述,类似于资源的ID,或者说资源的地址。
2.
表述(Representations)
     
表述是资源的具体表现形式,譬如,今天深圳的天气(资源),可以使用一副天气jpg图来描述,也可以XML数据来描述,也可以使用HTML的页面来描述, 一种资源可以有多种表述,也就是说,通过同一个URI地址可以获取到多种表现形式,而具体怎么表现,则取决于Web客户端与Web服务器端内容协商的一个结果。
3.
内容协商
     
客户端和服务端通过内容协商来协商请求内容和响应内容的格式,主要协商的内容包括:
     
请求协商:
      1)
字符集(Accept-Charset):客户端通过发送该协商建议服务端使用该字符集来发送响应结果,譬如
Accept-Charset=gb2312,utf-8;q=0.7,*;q=0.7
,客户端建议服务端优先使用gb2312或者utf-8来发送响应结果
      2)
请求编码(Accept-Encoding):客户端告诉服务端客户端所支持的编码格式,譬如Accept-Encoding  =gzip,deflate表明客户端支持gzip压缩或者普通响应的结果
      3)
语言(Accept-Language):客户端通过发送该协商告诉服务端客户端所使用的语言,譬如Accept-Language=zh- cn,zh;q=0.5表明客户端偏号的语言是中文,譬如对于今天深圳的天气这个资源来说,服务端可以通过该选项决定使用什么语言来表述资源
      4)
表述偏好(Accept):客户端通过该选项告诉服务端其表述的偏号,譬如一个请求今天深圳的天气Ajax程序,可以通过设置表述偏好为Accept=application/json来告诉服务端,希望得到Json描述的结果,而一个浏览器则可以通过传输表述偏好为Accept=text/html来告诉服务端,希望得到Html描述的结果
     
响应协商:
      1)
表述/表述字符集(Content-Type):服务端通过该协商告诉客户端表述的格式和字符集的情况,譬如Content-Type=text/html; charset=utf-8表示响应内容格式为Html,字符集为utf-8
       2)
表述编码(Accept-Encoding):服务端通过该协商告诉客户端表述的编码,譬如Content-Encoding=gzip服务端告诉客户端内容使用gzip压缩
4.
方法
    
方法定义了对资源的操作,主要的方法包括GETPOSTUPDATEDELETE等等,它们分别代表了对资源的读、建、改、删的操作
5.
缓存
      HTTP
协议支持在Web的各个节点对资源的表述进行缓存,譬如在浏览器客户端、代理服务器、反向代理服务器、目标服务器等上对表述进行缓存(注意,此处的缓存不仅仅是指在目标服务器上进行的业务级别的缓存)
      1)
客户端请求
     
如果客户端缓存了某些表述,则在进行读请求(GET)时,携带请求条件(所谓的条件GET,使用Cache-Control指令),服务端接收到客户端的请求条件,比较确认客户端的表述是否过时,如果没有,则返回304响应,否则则把最新的表述响应给客户端
      2)
服务端响应
     
服务端对一些需要缓存的表述,则响应中携带缓存指令,告诉请求客户端如何对表述进行缓存
      3)
方法对缓存的影响
     
当对一个资源进行UPDATEDELETE时,请求途经的所有服务器(如代理服务器、反向代理服务器、目标服务器)会自动将该资源对应的所有表述缓存失效。

 

 

 

 

 

 

-----------------------------------------------------MIME类型-------------------------------------------------

MIME类型? MIME中文意思是----多功能网际邮件扩充协议。-在把输出结果传送到浏览器上的时候,浏览器必须启动是党的应用程序来处理这个输出文档。这可以通过多种类型MIME()来完成。在HTTP中,MIME类型被定义在Content-Type header中。
 
例如,架设你要传送一个Microsoft Excel文件到客户端。那么这时的MIME类型就是“application/vnd.ms-excel”。在大多数实际情况中,这个文件然后将传送给Execl来处理(假设我们设定Execl为处理特殊MIME类型的应用程序)。在ASP中,设定MIME类型的方法是通过Response对象的ContentType属性。
 
多媒体文件格式MIME 
 
  最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML 文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
 
  MIME意为多目Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。
 
  每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
 
 
常见的MIME类型
 
超文本标记语言文本 .html,.html text/html 
普通文本 .txt text/plain 
RTF文本 .rtf application/rtf 
GIF图形 .gif image/gif 
JPEG图形 .ipeg,.jpg image/jpeg 
au声音文件 .au audio/basic 
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi 
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio 
MPEG文件 .mpg,.mpeg video/mpeg 
AVI文件 .avi video/x-msvideo 
GZIP文件 .gz application/x-gzip 
TAR文件 .tar application/x-tar 
 
  Internet中有一个专门组织IANA来确认标准的MIME类型,但Internet发展的太快,很多应用程序等不及IANA来确认他们使用的MIME类型为标准类型。因此他们使用在类别中以x-开头的方法标识这个类别还没有成为标准,例如:x-gzipx-tar等。事实上这些类型运用的很广泛,已经成为了事实标准。只要客户机和服务器共同承认这个MIME类型,即使它是不标准的类型也没有关系,客户程序就能根据MIME类型,采用具体的处理手段来处理数据。而Web服务器和浏览器(包括操作系统)中,缺省都设置了标准的和常见的MIME类型,只有对于不常见的 MIME类型,才需要同时设置服务器和客户浏览器,以进行识别。
 
  由于MIME类型与文档的后缀相关,因此服务器使用文档的后缀来区分不同文件的MIME类型,服务器中必须定义文档后缀和MIME类型之间的对应关系。而客户程序从服务器上接收数据的时候,它只是从服务器接受数据流,并不了解文档的名字,因此服务器必须使用附加信息来告诉客户程序数据的MIME类型。服务器在发送真正的数据之前,就要先发送标志数据的MIME类型的信息,这个信息使用Content-type关键字进行定义,例如对于HTML文档,服务器将首先发送以下两行MIME标识信息,这个标识并不是真正的数据文件的一部分。
 
  Content-type: text/html
 
  注意,第二行为一个空行,这是必须的,使用这个空行的目的是将MIME信息与真正的数据内容分隔开。

 

 

 

 

 

--------------------------------------------------------MD5----------------------------------------------------

MD5message-digest algorithm 5(信息-摘要算法)的缩写,被广泛用于加密和解密技术上,它可以说是文件的数字指纹。任何一个文件,无论是可执行程序、图像文件、临时文件或者其他任何类型的文件,也不管它体积多大,都有且只有一个独一无二的MD5信息值,并且如果这个文件被修改过,它的MD5值也将随之改变。因此,我们可以通过对比同一文件的MD5值,来校验这个文件是否被篡改过。