概述
超文本传输协议(Hyper Text Transfer Protocol,HTTP)
- HTTP 是客户端与服务端通信必须遵守的传输协议
- 客户端要以 HTTP 协议要求的格式把数据提交到服务器
- 服务器要以 HTTP 协议要求的格式把数据响应给客户端
发展
HTTP/0.9
需求是仅用于传输简单的 HTML 文件
请求过程
- 根据 IP 地址、端口和服务器建立 TCP 连接 — 三次握手
- 使用 GET 方法向服务器发送请求
- 服务器收到请求后,以ASCII字符流的形式响应给客户端
- 文档传输完后,连接断开 — 四次挥手
特点
- 仅用来传输体积较小的 HTML 文件
- 请求没有请求头和请求体,只有一个请求行
- 响应没有响应头,只有响应体
HTTP/1.1
为了适应传输多种格式文件的需要
HTTP/1.0 增加了请求头和响应头,以键值对形式保存
HTTP/1.1 增加了对持久连接、cookie 等技术的支持
需要解决的问题
- 浏览器需要知道返回的数据的类型,才能对不同文件进行针对性处理
- 浏览器还需要知道需要提供的语言版本
- 浏览器还需要知道文件的编码类型
针对上述问题对请求和响应作出改进
请求
客户端发送给服务器的消息,称 HTTP 请求消息,又称 HTTP 请求报文
报文由请求行、请求头、请求体三部分组成
请求行
由请求方式、URL、协议版本三个部分组成
图中的请求方式是 GET,URL 是 /api/getbooks,协议版本是 HTTP/1.1
请求头
用于描述客户端基本信息,从而把客户端信息告知服务器
由多个键值对组成
- 各字段含义
头部字段 | 说明 |
---|---|
Host | 要请求的服务器域名 |
Connection | 客户端与服务器的连接方式( close 或 keepalive ) |
Content-Length | 用来描述请求体的大小 |
Accept | 客户端可识别的响应内容类型列表 |
User-Agent | 产生请求的浏览器类型 |
Content-Type | 客户端告诉服务器实际发送的数据类型 |
Accept-Encoding | 客户端可接收的内容压缩编码形式 |
Accept-Language | 用户期望获得的自然语言的优先顺序 |
空行
位于最后一个请求头字段后,通知服务器 请求头至此结束
请求体
存放的是需通过 POST 方式 提交到服务器的数据
只有 POST 请求才有了请求体,GET 请求没有请求体
响应
响应消息就是服务器响应给服务端的消息内容,也称响应报文
状态行
由 HTTP 协议版本、状态码、状态码描述文本三部分组成,由空格隔开
如图协议版本为 HTTP/1.1 状态码为 200 状态码描述文本为 OK
请求头
描述服务器的基本信息,由 键值对 组成
头部字段 | 说明 |
---|---|
Access-Control-Allow-Origin | 是否可以跨域共享 |
Content-Type | 当前内容的 MIME 类型 |
Content-Length | 响应体的长度 |
Content-Language | 响应体所使用的语言 |
Date | 词条消息被推送的日期和事件 |
Connection | 用于指示链接建立完成后,会不会断开 |
ETag | 对于某个资源的特定版本的标识符,通常是一个消息队列 |
空行
最后一个响应头字段结束,紧跟一空行,表示响应头至此结束
响应体
服务器响应给客户端的资源内容
请求方法
用于表明要对服务器上资源进行的操作,常用的是 GET 和 POST
序号 | 方法 | 描述 |
---|---|---|
1 | GET | (查询) 发送请求来获得服务器上的资源,请求体中不会包含请求数据,请求数据放在协议头中。 |
2 | POST | (新增) 向服务器提交资源(例如提交表单或上传文件)。数据被包含在请求体中提交给服务器。 |
3 | PUT | (修改) 向服务器提交资源,并使用提交的新资源,替换掉服务器对应的旧资源。 |
4 | DELETE | (删除) 请求服务器删除指定的资源。 |
5 | HEAD | HEAD 方法请求一个与 GET 请求的响应相同的响应,但没有响应体。 |
6 | OPTIONS | 获取 http 服务器支持的 http 请求方法,允许客户端查看服务器的性能,比如 ajax 跨域时的预检等。 |
7 | CONNECT | 建立一个到由目标资源标识的服务器的隧道。 |
8 | TRACE | 沿着到目标资源的路径执行一个消息环回测试,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
响应状态码
HTTP Status Code 属于 HTTP 协议的一部分,用于标识响应的状态
位于响应的状态行中返回给浏览器
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作(实际开发中很少遇到 1** 类型的状态码) |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |