当客户端连上web服务器,并想访问web服务器的某个web资源时,需要遵守一定的通信格式,而Http协议就是用于定义客户端与web服务器通信格式的协议。Http全称hypertext transfor protocol,超文本传输协议,是基于TCP/IP协议的一个应用层协议。
一、Http请求头。
客户端连上服务器后,向服务器请求某个web资源,称之客户端向web服务器发送一个Http请求,一个完整Http请求应包括,一个请求行、若干消息头、以及实体内容。
1)请求行:用于描述客户端的请求方式,请求资源的名称,以及使用的HTTP协议版本号。GET(请求方式)/books/java.html(资源名称) HTTP/1.1
请求方式有:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用请求方式有:GET、POST。用户如果没有设置,默认情况浏览器向服务器发送GET请求,例如在地址栏输入地址访问和点击超链接访问都是GET,若想把GET改为POST,可以通过更改表单的提交方式实现。
两者主要区别:
GET:可以在请求的URL地址后以"?"的形式带上交给服务器的数据,多个数据之间以"&"隔开。(附带参数有限制,其数据容量通常不能超过1k)
POST:可以在请求实体中向服务器发送数据,数据量无限制。
2)请求头:用于描述客户端请求那台主机,以及客户端的一些环境信息等。
请求头:
Accept:text/html,image/* 用于告诉服务器客户机支持的数据类型
Accept-Charset:ISO-8859-1 用于告诉服务器客户机采用的编码
Accept-Encoding:gzip,compress 用于告诉服务器客户机支持的数据压缩格式
Accept-Language:en-us,zh-cn 用于告诉服务器客户机的语言环境
Host:www.it315.org:80 用于告诉服务器客户机想访问的主机名
if-Modified-Since:Tue,4 Oct 2013 18:23:51 GMT 用于告诉服务器,资源的缓存时间(下次在访问时根据时间比对网页是否更新,没更新直接拿出缓存,高级网站开发十分有用,减去大量访问次数)
Referer:http//www.it315.org/index.jsp 用于告诉服务器客户机是从哪个资源访问服务器(防盗链,盗链跳到首页)
User-Agent:Mozillz/4.0(compatible;MSIE 5.5;Windows NT 5.0) 用于告诉服务器客户机的软件环境
Cookie 用于向服务器带数据
Connection:close/Keep-Alive 请求完后是否保持连接
Data:Tue,4 Oct 2013 18:23:51 GMT 当前时间
3)请求数据
二、Http响应头。
web服务器响应客户端的请求并回送给客户端数据,称之为Http响应头。一个Http响应头包括,一个响应行、若干响应头、以及实体内容。
1)状态行:用于描述服务器对请求处理的结果。HTTP/1.1(响应协议) 200(状态码) OK
状态码:表示服务器对请求的处理结果,它是一个三位的十进制数。状态码分为五类。
100-199:表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程。
200-299:表示成功接收请求并完成整个处理结果,常用200。
300-399:为完成请求,客户端进一步细化请求。例如,请求的资源已移动一个新地址。常用302、307和304。(302新的地址,304或307拿缓存)
400-499:客户端的请求有错误,常用404(请求资源不存在)和403(没有权限)。
500-599:服务器端出现错误,常用500。
2)响应头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会它回送的数据
响应头:
Location:http//www.it315.org/index.jsp 配合302状态码使用,用于告诉客户端找谁(请求重定向,登录...)
Server:apache tomacat 用于告诉客户端服务器的类型
Content-Encoding:gzip 用于告诉客户端数据的压缩格式
Content-Length:80 用于告诉客户端压缩数据的长度
Content-Language:zh-cn 用于告诉客户端回送语言环境
Content-Type:text/html;charset=GB2312 用于告诉客户端回送数据类型
Last-Modified:Tue,4 Oct 2013 18:23:51 GMT 用于告诉客户端当前资源的缓存时间
Refresh:1;url=http//www.it315.org 用于告诉客户端隔多长时间刷新一次(聊天室、股票...),也可以控制刷到哪里。
Content-Disposition:attachment;filename=aaa.zip 用于告诉客户端以下载方式打开数据
Transfer-Encoding:chunked 用于告诉客户端数据的传送格式
Set-Cokkie:SS=QO=5Lb_nQ; path=/search
ETag:W/"7777-1242234904000" 缓存相关(可以做到时时更新)
Expiress:-1 用于告诉客户端把回送的资源缓存多长时间,-1或0表示不缓存
Cache-Control:no-cache 控制客户端不要缓存
Pragma:no-cache 控制客户端不要缓存
Connection:close/Keep-Alive 请求完后是否保持连接
Date:Tue,4 Oct 2013 18:23:51 GMT 当前时间
3)服务器向客户端回送的数据