应用层协议,由请求和响应构成,是标准的客户端服务器模型
特点
- 无连接,限制每次连接只处理一个请求
- 无状态,协议对于事务处理没有记忆能力
- 简单快速
- 灵活 允许传输任意类型的数据对象,由Content-Type标识
请求报文
- 请求行 请求类型-要访问的资源-HTTP协议版本号
- 请求头 说明服务器要使用的附加信息
- 空行 分割请求头和请求体
- 请求体 任意类型的数据
响应报文
- 状态行 状态码-状态信息-HTTP协议版本号
- 响应头 说明客户端要使用的附加信息
- 响应体 客户端需要的资源
Post 和 Get 的区别
- get请求可以缓存响应体,post不可以
- post请求相对get请求安全一些,get请求url包含信息、会被浏览器记录
- post请求可以通过
Request.body传输更多类型的数据,formdata,二进制,json
HTTP 持久连接(HTTP1.1 支持)
Conection: keep-alive 不关闭底层的 TCP 连接,避免重新建立连接
HTTP 管线化 (HTTP1.1 支持)
管线化后,请求和响应不再是依次交替的了。可以支持一次性发送多个请求,并一次性接收多个响应
只有 get 与 head 请求可以进行管线化,POST 有限制
初次创建连接时不应该启动管线机制,因为服务器不一定支持该协议
HTTP 数据协商
请求
- Accept 在请求中使用 Accept 可申明想要的数据格式
- Accept-Encoding 告诉服务端使用什么的方式来进行压缩 gzip、deflate、br
- Accept-Language 描述语言信息
User-Agent 用来描述客户端浏览器相关信息,可以用来区分 PC 端页面和移动端页面
响应
Content-Type 对应 Accept,从请求中的 Accept 支持的数据格式中选一种来返回
- Content-Encoding 对应 Accept-Encoding,指服务端到底使用的是那种压缩方式
- Content-Language 对应 Accept-Language
HTTP 首部
| 通用字段 | 作用 |
|---|---|
| Cache-Control | 控制缓存的行为 |
| Connection | 浏览器想要优先使用的连接类型,比如 keep-alive |
| Date | 创建报文时间 |
| Pragma | 报文指令 |
| Via | 代理服务器相关信息 |
| Transfer-Encoding | 传输编码方式 |
| Upgrade | 要求客户端升级协议 |
| Warning | 在内容中可能存在错误 |
| 请求字段 | 作用 |
|---|---|
| Accept | 能正确接收的媒体类型 |
| Accept-Charset | 能正确接收的字符集 |
| Accept-Encoding | 能正确接收的编码格式列表 |
| Accept-Language | 能正确接收的语言列表 |
| Expect | 期待服务端的指定行为 |
| From | 请求方邮箱地址 |
| Host | 服务器的域名 |
| If-Match | 两端资源标记比较 |
| If-Modified-Since | 本地资源未修改返回 304(比较时间) |
| If-None-Match | 本地资源未修改返回 304(比较标记) |
| User-Agent | 客户端信息 |
| Max-Forwards | 限制可被代理及网关转发的次数 |
| Proxy-Authorization | 向代理服务器发送验证信息 |
| Range | 请求某个内容的一部分 |
| Referer | 表示浏览器所访问的前一个页面 |
| TE | 传输编码方式 |
| 响应字段 | 作用 |
|---|---|
| Accept-Ranges | 是否支持某些种类的范围 |
| Age | 资源在代理缓存中存在的时间 |
| ETag | 资源标识 |
| Location | 客户端重定向到某个 URL |
| Proxy-Authenticate | 向代理服务器发送验证信息 |
| Server | 服务器名字 |
| WWW-Authenticate | 获取资源需要的验证信息 |
| 实体字段 | 作用 |
|---|---|
| Allow | 资源的正确请求方式 |
| Content-Encoding | 内容的编码格式 |
| Content-Language | 内容使用的语言 |
| Content-Length | request body 长度 |
| Content-Location | 返回数据的备用地址 |
| Content-MD5 | Base64 加密格式的内容 MD5 检验值 |
| Content-Range | 内容的位置范围 |
| Content-Type | 内容的媒体类型 |
| Expires | 内容的过期时间 |
| Last_modified | 内容的最后修改时间 |
