1、简介
HTTP 是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990 年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW 中使用的是HTTP/1.0的第六版,HTTP/1.1 的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP 协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP 协议简单,使得HTTP 服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
2、HTTP请求与响应
2.1 HTTP请求--方法
GET |
请求获取由Request-URI所表示的资源 |
POST |
在Request-URI所标识的资源后附加新的数据 |
HEAD |
请求获取由Request-URI所标识的资源的响应消息报头 |
PUT |
请求服务器存储一个资源,并用Request-URI作为其标识 |
DELETE |
请求服务器删除由Request-URI所标识的资源 |
TRACE |
请求服务器回送收到的请求信息,主要用于测试或诊断 |
2.2 HTTP请求--常见响应码
状态码 |
描述 |
客户端请求成功 |
200 |
OK |
客户端请求成功 |
206 |
Partial content |
返回请求实体的部分内容 |
301 |
Moved Permanently |
目标永久移动 |
302 |
found |
找到目标(目标临时被移动) |
304 |
Not Modified |
目标没有修改 |
400 |
Bad Request |
客户端请求有语法错误,不能被服务器所理解 |
403 |
Forbidden |
服务器收到请求,但是拒绝提供服务 |
404 |
Not Found |
请求资源不存在 |
413 |
Request Entity Too Large |
请求实体太大 |
500 |
Internal Server Error |
服务器发生不可预测的错误,导致无法完成客户端的请求 |
502 |
Bad Gateway |
网关错误,有可能是网络不通或负载过大导致。 |
504 |
Gateway Timeout |
连接超时 |
3、常见HTTP头域
Accept (标识浏览器能够接受的实体类型)
Accept-Charset /Accept-Language (字符集和语言)
Accept-Encoding (接受编码格式 gzip或者 deflat)
Cache-Control ( 缓存策略。例如:Cache-Control: no-cache )
Pragma ( 标注。例如:Pragma: no-cache )
Connection ( 连接参数。例如:Connection: close )
Date (日期。 例如:Date:Mon,31Dec200104:25:57GMT)
Content-Type (标识实体类型。例如:Content-Type: text/html。 Mime.types文件例子 )
Transfer-Encoding (传输编码。Chunk )
Content-Length (实体长度)
Set-Cookie / Cookie
User-Agent (浏览器标识)
Host (目标主机)
Expires
Last-Modified
Range/Content-Range
Content-Disposition
Referer (引用,通常是上一个访问的URL)
4、HTTP协议的格式和结构---例子
GET /index.shtml HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
HTTP/1.x 200 OK
Date: Tue, 10 Feb 2009 08:26:37 GMT
Server: Apache/2.2.8 (Unix) PHP/5.2.6
Accept-Ranges: bytes
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; Charset=utf-8