报文格式
1. 请求消息报文 Request Message Format

如上图所示,HTTP请求由三部分组成,分别是请求行(Request Line),请求头(Reqeust Header),请求正文(Request Body)。
请求行
请求行的格式是:Method Request-URI HTTP-Version CRLF, 如GET /index.html HTTP/1.1,采用GET请求,访问根目录下的index.html页面资源, 采用HTTP/1.1协议。
请求头
- 以冒号分隔的键值对,以回车(CR)加换行(LF)符号序列结尾。如:
Accept: text/plain; - 请求头和请求正文之间用一个空行分隔,即请求头的最后一个字段后面加两个
CRLF; - 请求头的字段和值以明文字符串格式传输;
- 按照惯例,非标准的协议头字段是在字段名称前加
X-前缀来标识,但这一惯例已在2012年6月被废弃; - 标准中没有对每个协议头字段的名称和值的大小设置任何限制,也没有限制字段的个数。然而,出于实际场景及安全性的考虑,大部分的服务器、客户端和代理软件都会实施一些限制。
- 按照惯例,非标准的协议头字段是在字段名称前加
请求字段
看一个日常工作中的页面的请求头:
GET /staff/api/view/dingtalk/user/0851621329366335 HTTP/1.1
Host: 127.0.0.1:8080
Connection: keep-alive
Accept: */*
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1
Referer: http://127.0.0.1:8080/staff/ddtalk/bpmstest
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.6,en;q=0.4
Cookie: JSESSIONID=428A8DE6EEF1512E98621D9BA8AAA265
- Host:服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号。如果所请求的端口是对应的服务的标准端口,则端口号可被省略。
自超文件传输协议版本1.1(HTTP/1.1)开始便是必需字段。如上述请求中,请求的服务器为本地的8080端口:
127.0.0.1:8080 - User-Agent: 浏览器的浏览器身份标识字符串
- Accept: 指定客户端能够接受的回应内容类型(Content-Types)
| 协议头字段名 | 说明 | 示例 | 状态 | |
|---|---|---|---|---|
| Accept | 能够接受的回应内容类型(Content-Types)。 | Accept: text/plain |
常设 | |
| Accept-Charset | 能够接受的字符集 | Accept-Charset: utf-8 |
常设 | |
| Accept-Encoding | 能够接受的编码方式列表。参考[HTTP压缩]。 | Accept-Encoding: gzip, deflate |
常设 | |
| Accept-Language | 能够接受的回应内容的自然语言列表。 | Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.6,en;q=0.4 以逗号分隔,q=0.8表示;号前语言的优先级,值一般为0-1 |
常设 | |
| Accept-Datetime | 能够接受的按照时间来表示的版本 | Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT |
临时 | |
| Authorization | 用于超文本传输协议的认证的认证信息 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
常设 | |
| Cache-Control | 用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令 | Cache-Control: no-cache |
常设 | |
| Connection | 该浏览器想要优先使用的连接类型[[rfc:7230#section-6.1 | "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing"]]. </cite></ref> | Connection: keep-alive |
|
Connection: Upgrade |
常设 | |||
| Cookie | 之前由服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议Cookie | Cookie: $Version=1; Skin=new; |
常设: 标准 | |
| Content-Length | 以 八位字节数组 (8位的字节)表示的请求体的长度 | Content-Length: 348 |
常设 | |
| Content-MD5 | 请求体的内容的二进制 MD5 散列值,以 Base64 编码的结果 | Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== |
过时的[[rfc:7231#appendix-B | "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content"]]. </cite></ref> |
| Content-Type | 请求体的 多媒体类型 (用于POST和PUT请求中) | Content-Type: application/x-www-form-urlencoded |
常设 | |
| Date | 发送该消息的日期和时间(按照 |
Date: Tue, 15 Nov 1994 08:12:31 GMT</code |
常设 |