下面是一个http的请求头部。可以看到请求头部第一行为请求行(请求方法、请求资源位置、请求协议版本),第二行为请求主机(这个在HTTP/1.1协议中是一定需要的,不然会报400 bad request),接下来则是一些头部配置。
Connection: keep-alive表示该连接为持久连接
Accept: 表示请求方支持的数据类型
Accept-Encoding:表示请求方支持的压缩方式
Accept-Language:表示请求方式支持的语言类型
Cookie:携带用户个人信息,比较重要
User-Agent:表明用户身份
Upgrade-Insecure-Requests:表明是否需要从http转到https
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: A=B;C=D;E=F;G=H
下面是一个http的返回头部。可以看到返回信息包括协议、返回状态码、具体服务地址、时间、数据类型及数据编码等
Expires:内容过期时间
Connection:表明连接保存长连接
Set-Cookie:设置cookie
Transfer-Encoding:chunked,identity,从字面意义可以理解,前者指把要发送传输的数据切割成一系列的块数据传输,后者指传输时不做任何处理,自身的本质数据形式传输。举个例子,如果我们要传输一本“红楼梦”小说到服务器,chunked方式就会先把这本小说分成一章一章的,然后逐个章节上传,而identity方式则是从小说的第一个字按顺序传输到最后一个字结束。
Cache-Control:参看http://www.cnblogs.com/cuixiping/archive/2008/05/04/1181056.html
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Fri, 05 May 2017 13:47:20 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: private
Expires: Fri, 05 May 2017 13:47:20 GMT
Content-Encoding: gzip
X-UA-Compatible: IE=Edge,chrome=1
Strict-Transport-Security: max-age=172800
BDPAGETYPE: 2
BDQID: 0xab79c5d30004052b
BDUSERID: 794738359
Set-Cookie: A=B
Set-Cookie: C=D
Set-Cookie: E=F
Set-Cookie: G=H
HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文
1、状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
其中,HTTP-Version表示服务器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 //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
HTTP协议定义的是客户端与服务器互通信息的协议内容。通过设置头部信息,管理并控制双方对数据交互。底层使用tcp协议。考虑到tcp是一种面向连接的协议,而http是一种无连接、无状态的协议。因此http协议通过头部信息的设置控制http协议的传输过程。包括缓存控制,状态控制,连接控制,传输控制。这些内容稍后细谈。
待续……