WEB浏览器与WEB服务器之间一问一答的交互过程必须遵循一定的规则,这个规则就是Http协议。客户端连上web服务器后,若想获得Web服务器中的某个Web资源,需遵守一定的通讯格式,Http协议用于定义客户端与Web服务器通讯的格式。HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议集中的一个应用层协议(Http是工作在TCP/IP之上的),用于定义WEB浏览器和WEB服务器之间交换数据的过程以及数据本身的格式。
HTTP协议的版本:HTTP/1.0(早期版本)、HTTP/1.1(目前使用)、HTTP-NG(下一代的HTTP版本)
Http1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源
Http1.1协议中,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源(目前用的最多)
HTTP协议分为两部分:HTTP请求和HTTP响应头
HTTP请求:
客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括:
一个请求行、若干消息头、以及实体内容,如下所示 :
GET /books/java.html HTTP/1.1 //请求行(用于描述客户端的请求方式,资源名称以及版本号)
/ /以下是消息头(用于描述客户端请求哪台主机,以及客户端一些环境信息等)
Accept: */* //用于告诉服务器,客户机支持的数据类型。
Accept-Language: en-us //支持的语言
Connection: Keep-Alive //代表请求完后是保持链接还是关闭链接
Host: localhost //请求服务器的主机
Referer: http://localhost/links.asp //客通过这个头告诉服,它是从哪个资源来访问的服务器
User-Agent: Mozilla/4.0 //客户机的软件环境。
Accept-Encoding: gzip, deflate //支持压缩格式
//空行
//请求数据(如表单的post提交)
请求行中的GET称之为请求方式,请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT常用的有: GET、 POST用户如没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。
POST或GET请求的区别:
不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:
如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。
如请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。
用于HTTP请求中的常用消息头:
Accept:text/html,image/* 用于告诉服务器,客户机支持的数据类型。(如:*/*:表示什么格式的数据都支持)
Accept-Charset:ISO-8859-1 用于告诉服务器,客户机采用的编码。
accept-language:en-us,zh-cn 客户机的语言环境。
Host:www.baini.com:80 客户机通过这个头告诉服务器,想访问的主机名。
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。
Referer: 客户机通过这个头告诉服务器,它是从哪个资源来访问的服务器(一般用于防盗链);
User-Agent:客户机通过这个头告诉服务器,客户机的软件环境。
Cookie:客户机通过这个头可以向服务器带数据。
content-type:内容类型
Accept-Encoding:gzip,compress 用于告诉服务器,客户机支持的数据压缩格式。
content-length:表示请求消息正文的长度
Connection:close/Kepp-Alive:代表请求完后是保持链接还是关闭链接。
Date:当前请求的时间。
HTTP响应:
一个HTTP响应代表服务器向客户端回送的数据,它包括:
一个状态行、若干消息头、以及响应内容 。
举例:
HTTP/1.1 200 OK //状态行(响应采用的协议,状态码,状态说明)
/ /以下是响应头(用于描述服务器的基本信息以及数据的描述,服务器通过这些数据的描述信息,
可以通知客户端如何处理会送的数据)
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Cache-control: private
//空行
<HTML> //实体内容
<BODY>
……
状态行 :
格式: HTTP版本号 状态码 原因叙述<CRLF>
举例:HTTP/1.1 200 OK状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:
状态码 含义
100~199 表示服务器成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299 表示服务器成功接收请求并已完成整个处理过程,常用200
300~399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、304
400~499 客户端的请求有错误,常用404
500~599 服务器端出现错误,常用 500
HTTP响应中的常用消息头:
Location: http://www.grhrea.org/index.jsp //这个头配合302状态码使用,用于告诉浏览器找哪个页面(用location和302实现请求重定向)
Server:apache tomcat //服告诉告诉浏览器的类型
Content-Encoding: gzip //数据的压缩格式(可提高浏览器的访问性能)
Content-Length: 80 //回送数据的长度
Content-Language: zh-cn //回送的语言
Content-Type: text/html; charset=GB2312 //回送数据的类型
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT //当前资源的缓存时间
Refresh: 1;url=http://www.it315.org //隔多长时间刷新一次
Content-Disposition: attachment; filename=aaa.zip //以下载资源方式打开Transfer-Encoding: chunked //数据的传送格式
Set-Cookie:SS=Q0=5Lb_nQ; path=/search //缓存相关的头ETag:W/"7777-1242234904000" //缓存相关的头(时时更新)
Expires: -1 //把回送的资源缓存多长时间,-1或0,则不缓存
Pragma: no-cacheCache-Control:no-cache //服务器通过以上两个头,也是控制浏览器不要缓存数据(不同的浏览器对缓存的处理都是不同的)
Connection: close/Keep-Alive //响应完后是否断开连接
Date: Tue, 11 Jul 2000 18:23:51 GMT //告诉浏览器响应的时间