转自:http://blog.csdn.net/maetelibom/article/details/51909869
http是web客户端和服务端的通讯的应用层协议,通常基于TCP/IP。交互方式如下:
1. 客户端和服务端建立连接2.客户端发送请求
3.服务端响应请求
4.关闭连接
由于创建/关闭连接的代价很大,所以,在HTTP1.1之后,一个连接之内,可发发送多次请求。
下面主要介绍客户端的请求和服务端的响应。
一、请求格式
请求格式包括起始行,请求消息头部和请求消息正文。看下图:
1.起始行
起始行包含HTTP方法,URI和HTTP版本,格式如下:http_method URI http_version
- HTTP方法有以下几种:
POST : 将资源上传到URI指定的位置。
PUT : 上传资源,将资源上传到URI指定的位置。
DELETE : 删除URI指定的资源
HEAD : 和get类似,但是它只返回消息头部,不返回消息正文
TRACE : 回显客户端请求进行调试
OPTIONS : 查询服务器的能力,看服务器能如何处理一个资源。POST和PUT的主要区别是,PUT是幂等性的,即重复提交多次与提交一次的效果是一样的。POST不是幂等性的。
- URI
- http版本
cache-control: 指定缓存机制
Connection: 两种值,keepalive和close。值为keep-alive时, 客户端到服务器端的连接持续有效。当出现对服务器的后继请求时,keepalive功能避免了建立或者重新建立连接.
date:消息发送的时间
Etag:资源每次修改,Etag都会改变。用于判断资源是否有更改。
If-Match:如果对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动作。
If-None-Match:如果对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动作。
Accept : 申明自己的接受的数据类型,通常使用MIME类型
Accept-Encoding:申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate)
Accept-Language:申明自己接收的语言语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等。
Authorization:当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,该头部来回应自己的身份验证信息给WEB服务器
Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。
Pramga:主要使用 Pramga: no-cache,相当于 Cache-Control: no-cache。
Range:(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。
Referer:向 WEB 服务器表明自己是从哪个网页/URL 获得/点击当前请求中的网址/URL。
User-Agent: 表明自己的身份
Accept-Charset:申明自己接收的字符集
3.请求消息正文
当使用PSOT或PUT的方法时,就需要上传数据给服务器。数据就是在消息正文中。
二、响应格式
响应格式包括:状态行,响应消息头部和响应消息正文。请看下图:
1.响应行
响应行包括HTTP版本,响应码和响应描述。响应码有以下几类:
1XX : 信息
2XX:请求成功,最常见的是200
3XX:重定位及重定向
4XX:客户端错误
5XX:服务端错误
2.响应消息头部
响应报头允许服务器传递不能放在状态行中的附加响应信息,以及关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。同样是由key : value组成,以一个空行结束。主要有以下几种key:
cache-control: 指定缓存机制
Connection:值为close,keepalive和keep-alive
Content-Encoding:服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。
Content-Language:服务器告诉浏览器自己响应的对象的语言。
Content-Length: 服务器告诉浏览器自己响应的对象的长度。
Content-Range: 服务器表明该响应包含的部分对象为整个对象的哪个部分。
Content-Type: 服务器告诉浏览器自己响应的对象的类型
Etag :资源每次修改,Etag都会改变。用于判断资源是否有更改。If-Match:如果对象的 ETag 没有改变,其实也就意味著对象没有改变,才执行请求的动作。
If-None-Match:如果对象的 ETag 改变了,其实也就意味著对象也改变了,才执行请求的动作。
Expired:服务器表明该实体将在什么时候过期,对于过期了的对象,只有在跟WEB服务器验证了其有效性后,才能用来响应客户请求。是 HTTP/1.0 的头部。
If-Modified-Since:如果请求的对象在该头部指定的时间之后修改了,才执行请求的动作(比如返回对象),否则返回代码304,告诉浏览器该对象没有修改。
If-Unmodified-Since:如果请求的对象在该头部指定的时间之后没修改过,才执行请求的动作(比如返回对象)。
Last-Modified:服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。
Location:服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取
Server:服务器表明自己是什么软件及版本等信息。
Transfer-Encoding:服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked)。
WWW-Authenticate:响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。
3.响应消息正文