HTTP协议:(hypertext transfer protocol)--超文本传输协议,是TCP/IP协议族中应用层的协议,用于定义WEB服务器间的交换数据过程及数据本身的格式。目前版本:HTTP1.0 HTTP1.1 HTTP-NG(下一代版本)
一、HTTP的会话方式
HTTP/1.0:
1、建立连接
2、客户端发送请求
3、服务器响应请求
4、关闭连接
每次连接只能处理一个http请求,如要向服务器请求一个包含多图片的网页,需要建立多次连接。
HTTP1.1
特点:
1、在一个TCP连接上可以传送多个HTTP请求和响应
2、多个请求和响应可以重叠进行,也被称作管道(pipeline)
3、增加了更多的请求头(如:Host)和响应头
二、HTTP消息
1、请求消息:
一个请求行、若干消息头、实体内容(消息头和实体内容是可选的,他们之间用空行隔开)
请求行:
格式:请求方式 资源路径 HTTP/版本号(回车换行)
请求方式:POST、HEAD、OPTIONS、DELETE、TRACE、PUT
例如:
GET/books/java.html HTTP/1.1 ---请求行
Accept: */* ----消息头
Accept-Language: en-us ----消息头
Connection: Keep-Alive ----消息头
Host: localhost ----消息头
Referer: http://localhost/links.jsp ----消息头
User-Agent: Mozilla/4.0 ----消息头
Accept-Encoding: gzip,deflate ----消息头
------空行
2、响应消息
一个状态行、若干消息头、实体内容(消息头和实体内容是可选的,他们之间用空行隔开)
状态行:
格式: HTTP/版本号 状态码 原因叙述(回车换行)
例如:
HTTP/1.1 200 OK ---状态行
Server: Microsoft-IIS/5.0 ----消息头
Date: Thu,13 Jul 2000 05:44:22 GMT ----消息头
Content-Length: 2291 ----消息头
Content-Type: text/html ----消息头
Cache-control: private ----消息头
------空行
<HTML> -----实体内容
<BODY>
.....
GET方式的请求消息中不包含实体内容,只有POST、PUT、DELETE方式的请求消息中才可以包含实体内容
在HTTP1.1中,如果消息中包括实体内容,并且没有采用chunked传输编码方式,那么消息头重必须包含内容长度的字段,否则客户端或服务器程序就无法知道实体内容何时结束。
在HTTP协议中,还可以使用简单的请求消息和响应消息。简单消息没有消息头部分,并且简单请求消息只能使用GET方式,且请求行中不包含HTTP版本号,简单响应消息中只包含实体内容
三、HTTP消息头:(格式:头字段名称,然后是冒号、空格、值、回车换行)
消息头按用途的分类:通用信息头、请求头、响应头、实体头、扩展头
1、通用信息头:既能用于请求消息也能用于响应消息
Cache-Control: no-cache (是否缓存消息)
Connection: close (是否保持连接)
Date: Tue,11 Jul 2010 18:18:18 GMT
Pragma: no-cache (HTTP1.0中的指示是否缓存消息)
Trailer: Date (表示Date消息头在实体内容之后)
Transfer-Encoding: chunked (将实体内容分段传送,并在每段内容前加上一个16进制的数字表示分段的大小,最后一个分段大小必须为0,表示实体内容结束)
2、请求头
Accept: text/heml,image/* (客户端能够接受的数据类型)
Accept-Charset: ISO-8859-1,unicode-1-1 (客户端能够接受的字符集编码)
Accept-Encoding: gzip,compress (客户端能够解码的数据编码方式,多为压缩编码)
Accept-Language: en-gb,zh-cn (客户端接受的语言种类)
Host: www.baidu.com:80
Authorization: Basic enh3ojeyMzQug
Range: bytes=100-600 (要求服务器端返回实体内容中100到600字节的内容,可用于断点续传)
Referer: http://www.baidu.com (表示该请求是从那个超连接发起)
User-Agent: Mozilla/4.0 (客户端浏览器种类)
3、 实体头: 实体内容的元信息,描述了实体内容的属性。包括实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
Allow: GET,POST (访问资源允许的方式)
Content-Encoding: gzip (当前实体内容的数据压缩编码方式)
Content-Language: zh-cn (当前实体内容的语言类型)
Content-length: 80 (实体内容的长度)
Content-Location: http://www.xxx.com/yyy.html (响应内容所位于的真实位置)
Content-Range: bytes 100-600 (返回的部分实体内容是完整实体内容的100字节到600字节)
Content-Type: text/heml; charset=GB2312 (实体内容的MIME类型以及字符集编码)
Expires: Tue, 11 Jul 2000 18:18:18 GMT (缓存过期时间)
Last_Modified: Tue, 11 Jul 2000 18:18:18 GMT (最后更新时间)
4、 扩展头:在HTTP消息中也可以使用规范里没有定义的头字段,既自定义HTTP头。目前流行的浏览器支持的常用扩展头有:Cookie、Set-Cookie、Refresh和Content-Disposition等
Refresh: 1 (在指定的时间(1S)之后进行刷新)
Refresh: 1; url=htp://www.xxx.com (在指定时间后跳转到URL)