http://blog.csdn.net/ast_224/archive/2008/10/15/3080431.aspx
HTTP 协议采用了请求 / 响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、 URI 、协议版本、以及包含请求修饰符、客户信息和内容的类似于 MIME 的消息结构。服务器以一个状态行作为响应,相应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。
通常 HTTP 消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。 HTTP 的头域包括通用头,请求头,响应头和实体头四个部分。
l 通用头域包含请求和响应消息都支持的头域,通用头域包含 Cache-Control 、 Connection 、 Date 、 Pragma 、 Transfer- Encoding 、 Upgrade 、 Via 。
l 请求头域允许客户端向服务器传递关于请求或者关于客户机的附加信息。请求头域可能包含下列字段 Accept 、 Accept-Charset 、 Accept-Encoding 、 Accept-Language 、 Authorization 、 From 、 Host 、 If-Modified- Since 、 If-Match 、 If-None-Match 、 If-Range 、 If-Range 、 If-Unmodified-Since 、 Max- Forwards 、 Proxy-Authorization 、 Range 、 Referer 、 User-Agent 。
l 响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI 进一步的信息。响应头域包含 Age 、 Location 、 Proxy-Authenticate 、 Public 、 Retry-After 、 Server 、 Vary 、 Warning 、 WWW- Authenticate 。
l 实体头域包含关于实体的原信息,实体头包括 Allow 、 Content-Base 、 Content-Encoding 、 Content- Language 、 Content-Length 、 Content-Location 、 Content-MD5 、 Content-Range 、 Content-Type 、 Etag 、 Expires 、 Last-Modified 、 extension-header 。
其中对通用头域 / 请求头域 / 响应头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域 / 请求头域 / 响应头域,一般将会作为实体头域处理。
基于 HTTP 协议的客户 / 服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。
1) 建立连接:
客户端与服务器的 80 端口进行三次握手建立一个 tcp 连接;
(若为HTTPS协议服务器则端口换成443,且要在tcp连接建立成功后,接着进行SSL连接的建立。)
2) 发送请求信息:
连接建立以后,客户端把请求消息送到服务器的停留端口上,完成提出请求动作。
请求消息的第一行为下面的格式:
Method SP Request-URI SP HTTP-VersionCRLF
Method 表示对于 Request-URI 完成的方法,这个字段是大小写敏感的,包括 OPTIONS 、 GET 、 HEAD 、 POST 、 PUT 、 DELETE 、 TRACE ;
SP 表示空格;
Request-URI 遵循 URI 格式,在此字段为星号( * )时,说明请求并不用于某个特定的资源地址,而是用于服务器本身;
HTTP-Version 表示支持的 HTTP 版本,例如为 HTTP/1.1 ;
CRLF 表示换行回车符。
主要请求方式( method )如下:
l “HEAD” : 该方式主要用来只获取请求页面的首部。这个方法常用来检查超文本链接的有效性 , 可到达性和最近的修正 .
l “ GET ”: 用于获取 URI 指定服务器的任何资源,是最通用的一种方式。
1. 如果请求信息包括 If-Modified-Since, If-Unmodified-Since,If-Match, If-None-Match, or If-Range 报头域 , GET 的语义将变成 " 条件( conditial ) GET". 只有在条件报头域 (conditional header) 所描述的环境下 , 条件 GET 方法请求实体被传输 . " 条件 GET" 方法用于减少不必要的网络使用 , 这种使用允许在没有多种请求或客户机已经获传输数据的情况下刷新缓存实体 .
2. 如果请求头包含了 “ RANGE ” 域,则 GET 方法的语义将变成 " 部分 (partial)GET"," 部分 GET" 请求只要求传输部分实体。当客户端只得到了部分数据时,部分 GET 方式允许客户端只获取剩余部分的数据以此来减少不必要的网络使用。这是目前各种网络工 具采用伪 IE 下载支持断点续传的主要原理。
典型的请求信息:
GET /http://class/download.microtool.de HTTP/1.1
Accept:*/*
Accept-Language:zh-cn
User-Agent:Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host:download.microtool.de:80
Connection:Close
3) 发送响应信息:
接收和翻译一个请求信息后,服务器发出一个 HTTP 应答信息。响应消息的第一行为下面的格式:
HTTP-Version SP Status-Code SP Reason-PhraseCRLF
HTTP-Version 表示支持的 HTTP 版本,例如为 HTTP/1.1 ;
SP 表示空格;
Status-Code 是一个三个数字的结果代码;
Reason- Phrase 给 Status-Code 提供一个简单的文本描述。
Status-Code 的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取 5 个不同的值:
1xx: 信息响应类,表示接收到请求并且继续处理;
2xx: 处理成功响应类,表示动作被成功接收、理解和接受;
3xx: 重定向响应类,为了完成指定的动作,必须接受进一步处理;
4xx: 客户端错误,客户请求包含语法错误或者是不能正确执行;
5xx: 服务端错误,服务器不能正确执行一个正确的请求。
典型的响应消息:
HTTP/1.1 200 OK
Date:Mon,13Oct200806:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Mon,21Jan200812:46:28GMT
Etag:"51-479493cc "
Content-length:39725426
Connection:close