Http之报文
1 概述
HTTP报文是在HTTP程序之间发送的数据块,这些数据块以一些文本形式的元信息(meta-information)开头,描述了报文内容和含义。
2 报文流
HTTP使用流入(inbound)和流出(outbound)来描述事务处理(transaction)的方向。
流入是指报文从客户端或Agent流向源端服务器 流出是指报文源端服务器流向客户端或Agent代理3 报文组成
HTTP报文由三部分组成:对报文进行描述的起始行(start line);包含属性的首部块(header);可选的,包含数据的,主体(Body)部分.起始行和首部就是由行分隔的ASCII文本,每行由回车换行(CRLF)序列作为结束。header和body之间以空行(仅有CRLF)分隔。
4 报文语法
HTTP报文可以分两类:请求(request)报文和响应(response)报文。
请求报文的格式
响应报文的格式
格式说明
方法,客户端希望服务器对资源执行的动作。
请求的URL
HTTP协议的版本,格式为HTTP/
状态码,请求响应情况,成功,超时,失败等。
原因短语
实体的主体部分,包含一个由任意数据组成的数据块。可以不包含实体。
5
方法 | 是否包含主体 | 描述 |
---|---|---|
GET | 否 | 获取指定的资源 |
HEAD | 否 | 只从服务器获取文档的头部 |
POST | 是 | 向服务器发送需要处理的数据(Html表单) |
PUT | 是 | 将请求的主体部分存储到服务器上 |
TRACE | 否 | 对可能经过代理的报文进行跟踪 |
OPTIONS | 否 | 请求服务器告知其支持的各种功能 |
DELETE | 否 | 删除指定的资源 |
LOCK | 锁定服务器资源 | |
MKCOL | 在服务器上创建资源 | |
COPY | 在服务器上复制资源 | |
MOVE | 在服务器上移动资源 |
6 状态码
范围 | 已定义范围 | 分类 |
---|---|---|
100-199 | 100-101 | 信息提示 |
200-299 | 200-206 | 成功 |
300-399 | 300-305 | 重定向 |
400-499 | 400-415 | 客户端错误 |
500-599 | 500-505 | 服务器错误 |
其中具体的状态码详细说明如下:
100 Continue 说明服务器收到了请求的初始部分,请客户端继续。 101 Switching Protocols 服务器正在根据客户端的指定,将协议切换成Update首部所列的协议。200 OK 正常返回 201 Created 用户创建服务器对象的请求(比如PUT),响应的实体主体部分应该包括各种引用了已创建的资源的URL 202 Accept 请求已被接收,但服务器还未执行任何动作。 203 Non-Authoritative Information 实体首部包含的信息不是来自于源端服务器,而是来自资源的一份副本。 204 No Content 响应报文中包含若干首部和一个状态行,但是木有实体的主体部分,用于浏览器刷新 205 Reset Content 告知浏览器清空当前页面所有html表单内容。 206 Partial Content 成功的执行了一个部分或范围(Range)请求。这个响应中必须包含Content-Range、Date以及ETag或Content-Location首部。
300 Multiple Choices 客户端请求一个实际指向多个资源的URL时会返回 301 Moved Permanently 请求的资源被移除时使用,响应的Location首部中应包含资源现在所处的URL 302 Found 类似301,区别是客户端应该使用Location首部给出的URL来临时定位资源。将来的请求仍使用老的URL。(HTTP1.0会将POST转GET请求) 303 See Other 告诉客户端应该使用另一个URL来获取资源。新的URL位于响应报文的Location首部(HTTP1.1 实现功能类似Http1.0下的302) 304 Not Modified 客户端可以通过所包含的请求首部,使其请求变成有条件的。此状态码的响应不应该包含实体的主体部分。 305 Use Proxy 用来说明必须通过代理来访问此资源。 306 未使用 307 Temporary Redirect 类似301,区别是客户端应该使用Location首部给出的URL来临时定位资源。将来的请求仍使用老的URL,这里不会主动POST转GET,而是询问客户端。
400 Bad Request 告知客户端它发生了一个错误的请求 401 Unauthorized 在返回的首部中申请客户端对服务器的访问权限,对自己进行认证。 402 Payment Required 保留 403 Forbidden 请求被服务器拒绝 404 Not Found 服务器无法找到请求的URL 405 Method Not Allowed 发起的请求带有服务器不支持的方法 406 Not Acceptable 服务器没有客户端指定参数说明的请求类型实体时,使用此代码 407 Proxy Authorized Required 与401类似,但这里用于要求对资源进行认证的代理服务器 408 Request Timeout 超时 409 Conflict 请求可能在资源上引起一些冲突。 410 Gone 类似404,只是服务器曾经有过此资源。 411 Length Required 服务器要求请求报文中包含Content-Length首部 412 Precondition Failed 客户端发起条件请求(例如包含Expect首部的请求),且有一个条件失败的时候使用 413 Request Entity Too Large 客户端请求的实体主体部分超过服务器允许范围。 414 Request URL Too Long 请求的URL长度超过服务器允许范围 415 UNsupport Media Type 不支持的实体的内容类型 416 Request Range Not Satisfiable 请求资源的范围无效 417 Expectation Failed 请求的Expect首部包含的期望服务器无法满足
500 Internal Server Error 服务器遇到一个妨碍它为请求提供服务的错误 501 Not Implement 请求超出服务器的能力范围 502 Bad Gateway 作为代理或网关使用的服务器从请求响应链的下一条链路上收到一条伪响应。 503 Service Unavailable 服务器现在无法为请求提供服务 504 Gateway Timeout 与408类似,这里的响应来自一个网关或代理 505 HTTP Version Not Support 服务器不支持的Http版本
7
首部
首部分为5类:
7.1 通用首部
客户端和服务器端都可以使用的首部,提供了与报文相关的最基本的信息。
通用的信息性首部如下:
Connection 允许客户端和服务器端指定与请求/响应连接有关的属性。 Date 提供日期和时间标志,说明报文是什么时间创建的 MIME-Version 给出了发送端使用的MIME版本 Trailer 分块编码传输时,列出报文trailer部分的首部集合 Transfer-Encoding 告诉接收端为了保证报文的可靠传输,对报文采用了什么编码 Update 给出了发送端可能想要升级使用的新版本或协议 Via 显示了报文经过的中间节点(网关、代理)通用缓存性首部如下:
Cache-Control 用于随报文传送缓存指令 Pragma 另一种随报文传送指示的方式7.2 请求首部
请求报文特有的,用于说明客户端发送出来的请求相关信息
请求信息性首部如下:
首部 | 描述 |
---|---|
Client-IP | 客户端的IP |
From | 客户端用户的email地址 |
Host | 接收请求的服务器ip和port |
Referer | 提供了包含当前请求URI的文档的URL |
UA-Color | 客户端显示器显示颜色有关信息 |
UA-CPU | 客户端CPU类型或制造商 |
UA-Disp | 与客户端屏幕显示能力相关信息 |
UA-OS | 客户端操作系统名称以及版本 |
UA-Pixels | 客户端显示器像素信息 |
User-Agent | 发起请求的应用程序名称 |
Accept首部
Accept首部为客户端提供了一种将其喜好和能力告知服务器的能力。服务器可以根据这些信息,发送相应的信息给客户端。
首部 | 描述 |
---|---|
Accept | 告诉服务器能够发送哪些媒体类型 |
Accept-Charset | 告诉服务器能够发送哪些字符集 |
Accept-Encoding | 告诉服务器能发哪些编码方式 |
Accept-Language | 告诉服务器能发送哪些语言 |
TE | 告诉服务器可以使用哪些扩展传输编码 |
条件请求首部
客户端在请求时若希望为请求加上限制,则使用以下:
首部 | 描述 |
---|---|
Expext | 允许客户端列出某请求所要求的服务器行为 |
If-Match | 获取与此处实体标记相匹配的资源 |
If-Modified-Since | 获取此处指定日期之后被修改的资源 |
If-None-Match | 和If-Match相反,获取与此处标记不匹配的资源 |
If-Range | 允许对资源的指定范围进行条件请求 |
If-Unmodified-Since | 与If-Modified-Since相反,获取此处指定日期之后未被修改的资源 |
Range | 请求资源的指定范围 |
安全请求首部
HTTP本身支持简单的安全请求,可以读请求进行质询/响应认证。要求客户端在获取特定资源前,首先对自身进行认证,包括以下部分:
首部 | 描述 |
---|---|
Authorization | 客户端提供给服务器,以便其对自身进行认证的数据 |
Cookie | 客户端向服务器传送一个令牌 |
Cookie2 | 用来说明请求端支持的cookie版本 |
代理请求首部
首部 | 描述 |
---|---|
Max-Forward | 在通往源端服务器的路径上,将请求转发给代理或网关的最大次数,与TRACE一起使用 |
Proxy-Authorization | 与Authotrization类似,在代理认证时使用 |
Proxy-Connection | 与Connection类似,用于与代理建立连接时。 |
7.3 响应首部
信息性首部
首部 | 描述 |
---|---|
Age | (从最初创建开始)响应持续时间 |
Public | 服务器为其资源支持的请求方法列表 |
Retry-After | 若资源不可用,在此时间重试 |
Server | 服务器应用程序软件版本和名称 |
Title | HTML文档源端给出的标题 |
Warning | 比原因短语中更详细的一些警告报文 |
协议首部
首部 | 描述 |
---|---|
Accept-Ranges | 服务器可接受的资源范围类型 |
Vary | 首部列表 |
安全响应首部
首部 | 描述 |
---|---|
Proxy-Authenticate | 来自代理的对客户端的质询列表 |
Set-Cookie | 客户端设置一个令牌,以便服务器对客户端进行标识 |
Set-Cookie2 | |
WWW-Authenticate | 来自服务器对客户端的咨询列表 |
7.4 实体首部
用于应对实体主体部分的首部
实体信息性首部
首部 | 描述 |
---|---|
Allow | 列出了对此实体执行的请求方法 |
Location | 告知客户端实体实际位于何处 |
内容首部
首部 | 描述 |
---|---|
Content-Base | 解析主体中的相对URL时使用的基础URL |
Content-Encoding | 对主体执行的编码方式 |
Content-Language | 主体的自然语言 |
Content-Length | 主体的长度 |
Content-Location | 资源实际位置 |
Content-MD5 | 主体的MD5校验和 |
Content-Range | 整个资源中此实体 |
Content-Type | 主体的对象类型 |
实体缓存首部
首部 | 描述 |
---|---|
ETag | 与此实体相关的实体标记 |
Expires | 实体不在有效 |
Last-Modified | 实体最后修改时间 |