1、HTTP 简介
HTTP(HyperText Transfer Protocol) ,即超文本传输协议,是在应用层的一个协议。
2、HTTP报文格式
HTTP1.0 报文有两种类型:请求报文和响应报文
结构如下:
请求报文格式:
请求行:请求方法(空格)请求的URL(空格)HTTP/版本号
首部字段行(有多行): 可选
空行(CRLF)
实体部分:只对POST请求有用
响应报文格式:
状态行: HTTP/版本号(空格) 状态码(空格)解释状态码的短语
首部行字段(有多行):可选
空行(CRLF)
实体部分
3、HTTP的请求方法
GET:获取URL指定的资源
POST:传输实体信息
PUT:上传文件
DELETE:删除文件
HEAD:获取报文首部, 与GET相比,不返回报文主体部分
OPTIONS:询问支持的方法
TRACE:追踪请求的路径
CONNECT:要求在与代理服务器通信时建立隧道,使用隧道进行TCP通信。
主要使用SSL 和 TLS 将数据加密后通过网络隧道进行传输。
4、报文首部的字段分类:
HTTP 报文首部字段一对键值对组成,键为字段名称,值为字段的值,两者由分号隔开。同一个字段名可以对应多个字段值。
- 请求首部字段:从客户端向服务器端发送请求报文时使用的首部。
补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
- 响应首部字段:从服务器端向客户端返回响应报文时使用的首部。
补充了响应的附加内容,也会要求客户端附加额外的内容信息。
- 实体首部字段:针对请求报文和响应报文的实体部分使用的首部。
补充了资源内容更新时间等与实体有关的信息。
- 通用首部字段 :请求报文和响应报文两方都会使用的首部
-
-其他首部字段:HTTP 协议中没有定义,但是被广泛应用于HTTP请求中的字段。
请求首部字段:
Accept: 这个首部字段可通知服务器,用户代理能够处理的媒体类型及媒体类型的相对优先级。
可使用 type/subtype 这种形式,一次指定多种媒体类型。
- 文本文件:text/html, text/plain, text/css,application/xhtml+xml, application/xml
- 图片文件:image/jpeg, image/gif, image/png
- 视频文件:video/mpeg, video/quicktime
- 应用程序使用的二进制文件:application/octet-stream, application/zip
Accept-Charset:首部字段可用来通知服务器用户代理支持的字符集及字符集的相对优先顺序。
另外,可一次性指定多种字符集。与首部字段 Accept 相同的是可用权重 q 值来表示相对优先级。
例如 Accept-Charset: iso-8859-5, unicode-1-1;q=0.8
Accept-Encoding:Accept-Encoding 首部字段用来告知服务器用户代理支持的内容编码及内容编码的优先级顺序。
可一次性指定多种内容编码。下面试举出几个内容编码的例子。
- gzip:由文件压缩程序 gzip(GNU zip)生成的编码格式。
- compress:由 UNIX 文件压缩程序 compress 生成的编码格式。
- deflate:组合使用 zlib 格式(RFC1950)及由 deflate 压缩算法(RFC1951)生成的编码格式。
- identity:不执行压缩或不会变化的默认编码格式。
Accept-Language:首部字段 Accept-Language 用来告知服务器用户代理能够处理的自然语言集(指中文或英文等),
以及自然语言集的相对优先级。可一次指定多种自然语言集。
例如 Accept-Language: zh-cn,zh;q=0.7,en-us,en;q=0.3,q 表示权重优先级。
Authorization:首部字段 Authorization 是用来告知服务器,用户代理的认证信息(证书值)。
通常,想要通过服务器认证的用户代理会在接收到返回的401 状态码响应后,
把首部字段 Authorization 加入请求中。
Host:首部字段 Host 会告知服务器,请求的资源所处的互联网主机名和端口号。
If-Match:形如 If-xxx 这种样式的请求首部字段,都可称为条件请求。
服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行请求。
Proxy-Authorization:接收到从代理服务器发来的认证质询时,客户端会发送包含首部字段Proxy-Authorization 的请求,
以告知服务器认证所需要的信息。
Referer:首部字段 Referer 会告知服务器请求的原始资源的 URI。
User-Agent:首部字段 User-Agent 会将创建请求的浏览器和用户代理名称等信息传达给服务器。
响应首部字段:
Age:首部字段 Age 能告知客户端,源服务器在多久前创建了响应。字段值的单位为秒。
Location:使用首部字段 Location 可以将响应接收方引导至某个与请求 URI 位置不同的资源。
Proxy-Authenticate:首部字段 Proxy-Authenticate 会把由代理服务器所要求的认证信息发送给客户端。
Server:首部字段 Server 告知客户端当前服务器上安装的 HTTP 服务器应用程序的信息。
不单单会标出服务器上的软件应用名称,还有可能包括版本号和安装时启用的可选项。
WWW-Authenticate:首部字段 WWW-Authenticate 用于 HTTP 访问认证。
· 它会告知客户端适用于访问请求 URI 所指定资源的认证方案(Basic 或是 Digest)
和带参数提示的质询(challenge)。状态码 401 Unauthorized 响应中,肯定带有首部字段 WWW-Authenticate。
实体首部字段:
Allow:首部字段 Allow 用于通知客户端能够支持 Request-URI 指定资源的所有 HTTP 方法。
当服务器接收到不支持的 HTTP 方法时,会以状态码405 Method Not Allowed 作为响应返回。
Content-Encoding:首部字段 Content-Encoding 会告知客户端服务器对实体的主体部分选用的内容编码方式。
Content-MD5:首部字段 Content-MD5 是一串由 MD5 算法生成的值,
其目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达。
对报文主体执行 MD5 算法获得的 128 位二进制数,
再通过 Base64 编码后将结果写入 Content-MD5 字段值。
通用首部字段:
Cache-Control:通过指定首部字段 Cache-Control 的指令,能够控制缓存的行为。
指令的参数是可选的,多个指令之间通过“,”分隔。
首部字段 Cache-Control 的指令可用于请求及响应。
Connection : 这个首部字段具备如下两个作用。
- 控制不再转发给代理的首部字段,Connection: 不再转发的首部字段名
- 管理持久连接,HTTP/1.1 之前的 HTTP 版本的默认连接都是非持久连接。
为此,如果想在旧版本的 HTTP 协议上维持持续连接,
则需要指定Connection 首部字段的值为 Keep-Alive。
Date:首部字段 Date 表明创建 HTTP 报文的日期和时间。
Transfer-Encoding:规定了传输报文主体时采用的编码方式,HTTP/1.1 的传输编码方式仅对分块传输编码有效。
其他首部字段:在HTTP协议通信交互中使用到的首部字段,不限于RFC2616 中定义的47种首部字段。
还有Cookie,Set-Cookie 和Content-Disposition等其他RFC中定义的首部字段。
Set-Cookie:当服务器准备开始管理客户端的状态时,会事先告知各种信息。
Set-Cookie 字段的属性:
Cookie:首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理支持时,
就会在请求中包含从服务器接收到的 Cookie。