一、HTTP协议概念
HTTP:Hyper Text Transfer Protocol超文本传输协议的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程及数据本身的格式。WEB浏览器与WEB服务器一问一答必须遵循一定的规则,这个规则就是HTTP 协议。
二、HTTP协议的版本
目前使用的有两处版本,分别是HTTP/1.1 与HTTP/1.0。HTTP/1.1 是有状态的,而HTTP/1.0是无状态的。简单的说使用HTTP/1.0时,每一次向服务器端的请求,必须新建一次连接,请求得到响应完毕,服务器将关闭此连接。那么下次再请求,就必须要再建一次连接,这种情况叫无状态。而使用HTTP/1.1时,每一次向服务器的请求,不必每次都建立连接,若第一次建立连接后,得到响应时服务器不会立即关闭连接,而是等待一段时间(有个会话超时时间),一旦超时时间到了则再关闭连接。而在超时时间之间的请求是不需要再次建立连接的。
注:如请求一个HTML资源,而HTML 中包含如有<img 标签时,会再发一个HTTP请求也就会导致请求一个资源时,会有多个HTTP请求。而有<a 标签则量少会再发请求,需要点击<a 标签后,再会去发HTTP请求。另外HTTP/1.1比HTTP/1.0有更多的请求头如host、is_unmodified_since等等。
三、HTTP请求消息详解:
3.1 HTTP请求消息可以分成三个部分:
1. 请求行:请求行中通常又包括三种方式:HTTP请求方式GET或POST、请求资源名称、HTTP协议版本举例如 GET /boo/java.html HTTP/1.1
2. 请求头:用于描述客户端请求哪台主机及客户端的一些环境信息,举例如:
Accept: */*
Accept-Encoding:gzi
Host:localhost
Refer:http://localhost/links.asp
3. 请求正文:在请求头与请求正文之间,必须要有一个空行,请求正文是可选的,当请求方式是POST时才会有请求正文,而当是GET方式时则没有请求正式。请求正式的内容是请求的相关参数,举例:
username=chen&password=123 而当请求是GET时,这些参数将直接在请求行中请求资源后面跟着,如请求行是: GET /book/java.html?username=chen&password=12 HTTP/1.1 即是了。
3.2常用的HTTP请求头
Accept: 浏览器可接受的MIME类型如 image/bmp、application/msword
Accept-Charset:浏览器可支持的字符集
Accept-Encoding:可支持解码的数据编码方式如:gzip , Deflate
Accept-Language:所希望的语言种类如:zh-CN
Host:初始RUL中的主机与端口号如localhost:8080
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。简单的理解就是访问此页面来源的上一个页面URL。
Content-tType:内容类型
Is_modified_since:利用此头属性与服务器的文件进行比对,若一致则响应304让浏览器自行从缓存中读取文件。此时间是GMT格林威治时间要早中国8小时。
User-Agent:浏览器类型如:Mozilla/5.0(compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Content-Length:请求消息正文的长度
Connection:表示是否进行持久连接,若是”keep-alive”则与HTTP/1.1一样是持久连接有状态的连接。
Cookie:比较重要..
Data:请求日期如Mon, 22Aug 2011 01:55:39 GMT请求时间GMT
四、HTTP响应消息详解
4.1 HTTP响应消息可以分成三个部分:
1. 响应行:请求行中通常又包括二种方式:HTTP协议版本、状态码及描述信息。举例如:HTTP/1.1 200 OK
2. 响应头:用于描述服务器基本信息及数据的描述,以告诉客户端如何处理回送来的数据,举例如:
Accept-Ranges:bytes
Content-Length:792
Content-Type:text/html
Date:Sun,16 Sep 2012 02:22:57 GMT
Last-Modified:Sat,15 Sep 2012 14:30:04 GMT
Server:Apache-Coyote/1.1
3. 响应正文:实体内容,代表服务器向客户端回送的数据,如
<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<title
…
4.2 常用的HTTP响应头:
Location: 指示新的资源位置如:http://localhost:8080/myapp/hello.htm
Server:指示服务器的类型如Apache-Coyote/1.1
Content-Encoding:服务器发送数据采用的数据编码类型如:gzip
Content-Length:告诉浏览器正文的长度。如:80。
Content-Language:服务器发送的文本语言如:zh-CN
Content-Type:服务器发送内容MIME类型如:text/html;charset=gbk
Content-disposition:比如指示客户下载文件attachment;filename=”a.jpg”
Last-modified:响应回送文件的最后时间如Sat, 15 Sep 2012 14:30:04 GMT
Refresh:指示客户端刷新频率如:Refresh: 1;url=http://www.it315.org
Set-Cookie:服务器发送的Cookie如Set-Cookie:SS=Q0=5Lb_nQ;path=/search
Expire:指示客户端是否缓存如-1 不缓存,通常与下面两个一起连用
Cache-control:指示客户端是否缓存用于http/1.1 如: no-cache。
Progma:指示客户端是否缓存用于HTTP/1.0 如:no-cache。
Connection:指示客户端连接方式有:keep-alive与close。Keep-alive指连接后先暂时不立即关闭连接,而close是连接完得到响应后就立即关闭连接。
Data:响应的时间,也是GMT时间如Sun, 16Sep 2012 02:22:57 GMT
五、HTTP响应状态码
5.1状态码分为5类,大类见下表:
1. 100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
2. 200~299 表示成功接收请求并已完成整个过程的处理。
3. 300~399 为完成请求客户端需进一步细化请求。如302 请求重定向
4. 400~499 客户端请求有错误。
5. 500~599 服务端请求有错误。
5.2 常见的状态码
200 正常OK。 302/307 请求重定向 304 未修改使用缓存读取
404 未找到资源 500 服务器内部错误。