![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/857d3667d0a7bea6933a42c0ec4757e5.png)
概述
根据HTTP标准,HTTP请求可以使用多种请求方法。
- HTTP1.0定义了三种请求方法: head、get、post方法。
- HTTP1.1新增了五种请求方法:put、delete、options、trace、connect方法。
简单请求与预检请求
1.简单请求
HTTP 1.0 三个方法:HEAD、GET、POST 默认都属于简单请求 Simple Request
- 没有自定义报头
- MIME Type in text/plain、multipart/form-data、application/x-www-form-urlencoded
2.预检请求
预检请求 Priflight Request 即在请求之前需要首先由浏览器自发发送 Options 请求的请求。预检请求为OPTIONS请求,用于向服务器请求权限信息的。预检请求被成功响应后,才会发出真实请求,携带真实数据。
预检请求的范围
一般 HTTP1.1 中的方法请求默认都会触发预检请求
但是简单请求满足以下条件也可以触发 Options 请求
- 带有自定义头信息
- MIME Type Not in text/plain、multipart/form-data、application/x-www-form-urlencoded
各个请求方法介绍
Get
1.方法用途
- GET 方法的首要目的是 获取资源
2.方法特点
a) 参数可见
- GET 方法的参数是明文可见的包含在 URL 当中,所以说敏感信息不建议使用 GET 方法
- 不过也正是因此,GET 方法允许被保存书签
b) 数据类型只允许 ASCII
- GET 方法的数据类型只允许是 ASCII 字符,所以说传递 二进制 文件就不可以用 GET 方法了哦
c) 可以保存书签
- 当我们访问某一个网站的频率特别高的时候,肯定添加到书签,那其实书签就是依靠 GET 方法来保存的
d) 可以被缓存
- GET 方法支持缓存,当本次请求允许被缓存时,会将资源存值本地 cache ,在未过期的情况下直接取本地 cache;缓存过期后视情况而定
e) 参数会保留在浏览器历史记录
- 比较直观的感受就是,我们可以在浏览器的历史记录中查看到曾经搜索过的关键字信息
f) 请求长度会受限于所使用的浏览器与服务器
- 不同的浏览器对于 GET 请求长度的限制也是不同的,注意这是 浏览器 / 服务器(IE、Chrome、Apache、IIS等) 对于长度的限制,而不是 HTTP 协议
Post
1.方法用途
- POST 方法的首要目的是 提交,POST 方法一般用于添加资源
2.方法特点
a) 参数不可见,也不会被保存
- 所以说 POST 方法是不可以被保存书签的
b) 不能收藏为书签
- 理由如上
c) 不可以被缓存
- 我要提交的数据被缓存在本地 cache 中想想其实也是没道理的
d) 不会被保存在浏览器历史中
- 同样是因为参数不可见
e) 不限制请求长度
- 对于 POST 方法这种以 提交 为首要目的的方法,肯定是不可以限制请求长度的
f) 数据类型
- 不限,所以说 POST 是可以 提交文件 到服务器的
g) 请求方式
- POST 请求与 GET 请求不同,他会首先提交 HEAD 信息,待得到 100 响应后,才会再次将 DATA 提交
Head
1.方法用途
- HEAD 方法用于获取报头信息,例如检查 cache 是否被修改,是否过期?
2.方法特点
- HEAD 方法与 GET 方法类似,但并不会返回响应主体
Options
1.方法用途
- OPTIONS 方法的首要目的是 Priflight Request
2.方法特点
假如现在有如下配置:
Access-Control-Allow-Methods:OPTIONS, PUT
那么当浏览器发起了 Priflight Request 后,只在包含在 被允许的 HTTP 方法中的请求会被通过(Simple Request除外),而没有被包含在内的请求,例如 Delete 在Options之后将不会被请求
Put 与 Patch
1.方法用途
- Put 与 PATCH 方法都是用于更新资源
2.方法特点
- Put :对后台来说 Put 方法的参数是一个完整的资源对象,它包含了对象的所有字段
- Patch:对后台来说 Patch方法的参数只包含我们需要修改的资源对象的字段
Delete
1.方法用途
Delete方法一般用于删除资源
方法与规范
其实虽然我们都说 Post(增) Delete(删)Put(改)Get(查),但其实真正我们是如何实现方法的是随意的,也就是你完全可以用 Get删除资源,Delete增加资源,所以说还有些没想明白的同学到这里就可以释然了,毕竟规定是死的,人是活的,但是按照规定是好的,不按规定也是可以的。