HTTP(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输量减少。它不但能保证计算机正确快速地传输超文本文档,还能确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。      
   HTTP是基于请求/响应模式(客户机/服务器)的协议。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源定位符(URL)、协议版本号,后边是MIME信息(包括请求修饰符、客户机信息和可能的内容)。服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个响应成功或失败的代码,后边是MIME信息(包括服务器信息、实体信息和可能的内容)。
HTTP目前的版本有1.01.1两种定义了以下重要的协议:
1) HTTP标题
2)  HTTP方法
3) HTTP响应信息
4) URL
5) HTTP流程

1  HTTP标题

当客户端通过浏览器向服务器端发送请求时,HTTP将请求转化为协议可以识别的HTTP标题信息传送至Web服务器处理。例如:
GET http://download.microtool.de:80/index.html  HTTP/1.1
Accept:image/gif,image/jpeg,image/pjpeg,*/*
Referer:http://download.microtool.de/
Accept-Language:zh-cn
User-Agent:Mozilla/4.0  (Windows NT 5.0;MSIE 5.01)
Host”download.microtool.de
此HTTP标题包含了以下重要的信息:
1)GET
代表客户端向服务器端发送HTTP请求的方法,可以分为以下几种。
l  GET(通过请求URI得到资源)。
l  POST(用于添加新的内容)。
l  HEAD(类似于GET,但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据)。
l  PUT(用于修改某个内容)。
l  DELETE(删除某个内容)。
l  CONNECT(用于代理进行传输,例如使用SSL)。
l  OPTIONS(询问可以执行哪些方法)。
l  TRACE(用于远程诊断服务器)。
2)http://download.microtool.de:80/index.html
    代表客户端请求的资源,以URI或者URL的形式表示。
3)HTTP/1.1   代表使用HTTP的版本。
    一般情况下,通过以上三类HTTP请求信息,服务器便能够了解客户端的HTTP请求是什么,并且能够确定请求资源的位置,并根据上述得到的信息进一步做出相应的响应。
除了上述信息之外,HTTP标题还包含以下信息:
(1)Accept表示客户端可以处理的媒体类型,如下列格式。这些媒体的类型可以按照优先级进行排序。若为*/*,则代表客户端可以接受所有类型的媒体形式。
l  Application/word
l  Application/excel
l  Application/pdf
l  Application/zip
l  Application/xml
l  image/jpeg
l  image/gif
l  text/css
l  text/html
l  video/mpeg
2Accept-Charset:定义客户端可以处理的字符集,按照优先级进行排序。在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。例如:Accept-Charset: iso-8859-1,*,utf-8
3Accept-Encoding:定义客户端可以理解的编码机制。例如:UTF7UTF8Unicode等。
4Accept-Language:定义客户端可以接受的自然语言列表。例如:Accept-Language: en,zh-cn
5Connection:用于表明是否保存socket连接作为开放的通用标头。例如:Connection: closeConnection: keep-alive6Content-Base:用于定义基本URI的实体标头,为了在实体范围内解析相对URLs如果没有定义Content-Base标头解析相对URLs,则使用Content-Location URI(存在且绝对)或使用URI请求。例如:Content-Base: Http://www.myweb.com
7Content-Encoding:一种媒体类型修饰符,标明一个实体是如何编码的。例如:Content-Encoding:zip
8Content-Length:指定服务器端响应中数据的字节长度。例如:Content- Length:382
9Content-Range:随实体部分一同发送,标明被插入字节的低位与高位字节偏移,也标明此实体的总长度。例如:Content-Range: 1001-2000/5000
10Content-Type:标明发送或者接收的实体的MIME类型。例如:Content-Type: text/html
11Host:服务器的主机名。对于使用HTTP/1.1的请求而言,此域是强制性的。例如:Host:www.myweb.com12Referer:表明客户端上一次所浏览的资源,通过Referer的内容,可令浏览器更快速地执行上一页的功能13User-Agent:定义用于产生请求的软件类型(典型的如Web浏览器)。例如:User- Agent:Mozilla/4.0(compatible;MSIE 5.5;Windows NT)

2 HTTP方法

当客户端向服务器端发送HTTP请求时,HTTP请求信息会随着HTTP方法一起传输到服务器,以告知服务器如何处理客户端的请求。
HTTP方法根据版本的不同会有所差异。其语法一般为:
<HTTP Method><URI>HTTP/<HTTP Version><CRLF>
例如: GET www.cctv.com/default.html http/1.1
1GETHTTP协议的一种基本方法。GET用来取回请求URI标志的任何信息。GET这个单词就是获取的意思。如果请求URI指向的是一个数据处理过程,那么返回的结果是数据处理过程的结果,而不是数据处理程序的代码。 如果HTTP标题中包含If-Modified-SinceIf-Unmodified-SinceIf-MatchIf-None-MatchIf-Range等条件字段,那么GET就变成了一个有条件的GET。只有满足条件,数据才会被返回。这样可以减少一些非必要的网络传输,或减少对某一资源的多次请求(一般的浏览器都有一个临时目录,用来缓存一些网页信息,当再次浏览某个页面的时候,只下载那些修改过的内容,以加快浏览速度,就是这个道理。至于检查,则常用比GET好的方法HEAD来实现)。如果HTTP包中含有Range头字段,那么请求URI指定的实体中,只有决定范围条件的那部分才被取回来。
2HEADHTTPHEAD方法和GET方法一样,唯一的差别就是服务器不能响应包含主体(Message-body)的请求。使用这个方法,可以使客户无需将资源下载就可以得到一些关于它的基本信息。这个方法常用来检查超级链接的可访问性以及资源最近有没有修改。HEAD方法经常用于获取资源的基本信息。
3POSTHTTPPOST方法就是要求服务器接受请求标题中的实体(Message-Body,并且将其作为请求URI的下属资源。这意味着首先服务器要保存这个实体信息,而且由服务器程序进行处理。POST方法一般包含两个步骤:为请求标题准备数据,然后读取服务器应答的数据信息。
4DELETE:客户端通过DELETE方法删除所定位的资源,但需要注意的是,服务器必须打开写入权限,以便修改目录下的文件,否则,DELETE将执行失败。
5PUT:正好与DELETE方法相反,客户端利用PUT方法在服务器上建立所指定的资源(如文件),如果资源已经存在,那么就将原来的资源覆盖。此方法一般用于向服务器上传文件。和DELETE方法一样,服务器必须打开自己的写入权限,否则,PUT方法将执行失败。

3  HTTP响应信息

        和其他的协议一样,HTTP协议也有自己的响应信息来表示客户端请求执行的情况。HTTP响应信息由三部分组成,分别是:状态行、消息报头、响应正文。
 状态行的格式如下:
                   HTTP-Version Status-Code Reason-Phrase CRLF
        其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。
状态代码由三位数字组成

4  URL

URL的全名为Uniform Resource Locator(统一资源定位符),它不仅可用来定位网络上信息资源的地址,也可用来定位本地系统要访问的文件。
URL可以分为两种类型,一种是绝对URL,另一种是相对URL。
         绝对URL就是指明需要访问的信息或资源的绝对位置。绝对URL的基本语法格式为:<协议>://<主机名>[:端口]/目录/名。其中,协议指定资源服务器的服务方式。WWW系统中,最常用的是“http”协议。主机名,指服务器域名,接入到因特网中的每个可供访问的服务器,都有一个专用的域名,用户要访问服务器上的资源,必须指明服务器的域名。端口是指明进入一个服务器的端口号,用数字表示,一般可缺省。目录是指文件所在服务器的目录或路径。名字是指文件名,在缺省的情况下,首先会调出称为“主页”的文件。          相对URL就是定位需要访问资源的相对路径。所谓的“相对路径”,就是所需资源相对于当前位置的路径。例如,当我们已处于服务器中的一个路径时,如果该路径中有多个文件需要访问,那么只需要指出文件名就可以了。 

5  HTTP流程

1)建立连接
连接的建立是通过申请套接字实现的。客户打开一个套接字并把它约束在一个端口上,如果成功,就相当于建立一个虚拟文件。以后就可以在该虚拟文件上写数据并通过网络向外传送。
2)发送请求
打开一个连接后,客户机把请求消息发送到服务器的相应端口上,完成提出的请求动作。HTTP/1.0请求消息的格式为:
请求消息=请求行 CRLF[实体内容]
请求行=方法 请求URL HTTP版本号 CRLF
方法=GET|POST|HEAD|扩展方法
URL=协议名称+主机名+目录与文件名
一个请求的例子为:GET www.cctv.com/default.html HTTP/1.0
3)发送响应
服务器在处理完客户端的请求之后,要向客户端发送响应消息。
HTTP/1.0的响应消息格式如下:
响应消息=状态行(通用信息头|响应头|实体头) CRLF
状态行=HTTP版本号 状态码 原因叙述
状态码表示响应类型
1××  保留
2××  表示请求成功接收
3××  为完成请求客户需进一步细化请求
4××  客户错误
5××  服务器错误
响应头的信息包括:服务程序名,通知客户请求的URL需要认证,请求的资源何时能使用。
4.关闭连接
客户端和服务器双方都可以通过关闭套接字来结束TCP/IP对话。