Http协议,是请求(request)/响应(response)模式。客户端(浏览器)向服务器发送请求,由服务器向客户端响应回复。
Http协议的优点协议简单、响应速度快;缺点是没有记忆能力,对事务处理没有记忆能力。如果后续处理需要前面的信息,必须重新传送,这样可能导致每次传送的数量增大。
Http请求报文
实例:
POST /chapter17/user.html HTTP/1.1
请求行[请求方法、请求url、http版本及协议]、请求头[]、请求体
1、 请求方法:get、post、delete、head、options、put、trace。不过常用的是get、post方法,其他方法不常用,导致被一些浏览器抛弃了。
请求方法详解:
GET 请求获取Request-URI所标识的资源
POST 在Request-URI所标识的资源后附加新的数据
HEAD 请求获取由Request-URI所标识的资源的响应消息报头
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT 保留将来使用
OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
具体请求行实例:Method:GET Request-URL:http://www.baidu.comHTTP-Version:http1.1 CRLF(回车换行符)
2、 请求头:报文头包括若干个属性,是以键值对的方式存储(属性名:属性值)
报文头分为普通报头、请求报头、响应报头、实体报头。
普通报头用于所有的请求和响应,但不用于传输实体,只用于传输的消息;他提供了与报文相关的最基础的信息。
请求报头用于户客户端向服务器发送请求时的附加消息;用于说明是谁在什么时候在发送请求、请求源自何处,或客户端的喜好及能力。
响应报头用于服务器向客户端发送响应时的附加消息;比如谁在发送响应、响应者的功能,甚至与相应相关的一些特殊指令。
实体报头用于描述主体的长度和内容,或者资源本身。
普通报头:
Connection:允许客户端和服务器指定与请求/响应连接有关的选项
Date:提供日期和时间标志,说明报文是什么时间创建的
MIME-Version:给出了发送端使用的MIME版本
Trailer:如果报文采用了分块传输编码方式,就可以用这个首部列出位于报文拖挂部分的首部集合
Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
Update:给出了发送端可能想要“升级”使用的新版本或协议
Via:显示了报文经过的中间节点(代理、网关)
Cache-Control:用于随报文传送缓存指示
请求报头:
Client-IP:提供了运行客户端的机器的IP地址
From:提供了客户端用户的E-mail地址
Host:给出了接收请求的服务器的主机名和端口号
Referer:提供了包含当前请求URI的文档的URL
UA-Color:提供了与客户端显示器的显示颜色有关的信息
UA-CPU:给出了客户端CPU的类型或制造商
UA-OS:给出了运行在客户端机器上的操作系统名称及版本
UA-Pixels:提供了客户端显示器的像素信息
User-Agent:将发起请求的应用程序名称告知服务器
Accept:告诉服务器能够发送哪些媒体类型
Accept-Charset:告诉服务器能够发送哪些字符集
Accept-Encoding:告诉服务器能够发送哪些编码方式
Accept-Language:告诉服务器能够发送哪些语言
TE:告诉服务器可以使用那些扩展传输编码
Expect:允许客户端列出某请求所要求的服务器行为
Range:如果服务器支持范围请求,就请求资源的指定范围
If-Match:如果实体标记与文档当前的实体标记相匹配,就获取这份文档
If-Modified-Sinec:除非在某个指定的日期之后资源被修改过,否则就限制这个请求
If-None-Match:如果提供的实体标记与当前文档的实体标记不相符,就获取文档
If-Range:允许对文档的某个范围进行条件请求
If-Unmodified-Since:除非在某个指定日期之后资源没有被修改过,否则就限制这个请求
Authorization:包含了客户端提供给服务器,以便对其自身进行认证的数据
Cookie:客户端用它向服务器传送数据
Cookie2:用来说明请求端支持的cookie版本
Max-Forward:在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数
Proxy-Authorization:这个首部在与代理进行认证时使用的
Proxy-Connection:这个首部是在与代理建立连接时使用的
实体报头
Allow:列出了可以对此实体执行的请求方法
Location:告知客户端实体实际上位于何处,用于将接收端定向到资源的位置(URL)上去
Content-Base:解析主体中的相对URL时使用的基础URL
Content-Encoding:对主体执行的任意编码方式
Content-Language:理解主体时最适宜使用的自然语言
Content-Length:主体的长度
Content-Location:资源实际所处的位置
Content-MD5:主体的MD5校验和
Content-Range:在整个资源中此实体表示的字节范围
Content-Type:这个主体的对象类型
ETag:与此实体相关的实体标记
Expires:实体不再有效,要从原始的源端再次获取实体的日期和时间
Last-Modified:这个实体最后一次被修改的日期和时间
相应报文也分为三部分:相应行、响应头、响应体
响应头、响应体与请求头请求体结构相同;响应行略微不同,相应行包含了服务器HTTP协议版本和状态码(Status-Code)及状态描述(Reason-Phrase)。
状态的相应解释:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
响应报头
Age:(从最初创建开始)响应持续时间
Public:服务器为其资源支持的请求方法列表
Retry-After:如果资源不可用的话,在此日期或时间重试
Server:服务器应用程序软件的名称和版本
Title:对HTML文档来说,就是HTML文档的源端给出的标题
Warning:比原因短语更详细一些的警告报文
Accept-Ranges:对此资源来说,服务器可接受的范围类型
Vary:服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端
Proxy-Authenticate:来自代理的对客户端的质询列表
Set-Cookie:在客户端设置数据,以便服务器对客户端进行标识
Set-Cookie2:与Set-Cookie类似
WWW-Authenticate:来自服务器的对客户端的质询列表
相应正文:
服务器返回的资源内容。
相关网站:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
http://blog.csdn.net/gaogaoshan/article/details/21237555
https://en.wikipedia.org/wiki/List_of_HTTP_header_fields