目的
- 理解各种 http 请求方法的安全性、幂等性、可缓存性
- 掌握各种 http 请求方法的语义,判断什么时候时候用那种请求方法更合适
- 理解一些 http 请求方法之间的区别
总结
描述 | 是否安全 | 是否幂等 | 是否可缓存 | |
---|---|---|---|---|
GET | 请求资源,获取数据 | 是 | 是 | 是 |
POST | 发送资源 | 否 | 否 | 当响应中包含「新鲜度」信息时可以被缓存 |
PUT | 创建/更新资源 | 否 | 是 | 同 post |
DELETE | 删除资源 | 否 | 是 | 否 |
HEAD | 获取响应头,应该和 get 请求的响应头相同 | 是 | 是 | 是 |
OPTIONS | 获取服务器支持的通信选项,比如说请求方法、请求头 | 是 | 是 | 否 |
CONNECT | 创建一个隧道,客户端和服务器的双向通道 | 否 | 否 | 否 |
TRACE | debug 连通性,服务器收到之后,应该修改 content-type 之后原样返回。 | 是 | 是 | 否 |
PATCH | 修改部分资源 | 否 | 否 | 否 |
安全:请求不会对资源造成影响
幂等:对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。
可缓存:请求结果会被客户端缓存
get 和 post 的区别
- 语义不同
- get 是幂等的,post 不是
- post 会有一个 content-type 的请求头,表明请求体的 MIME 类型,而 get 没有
- post 更安全。因为 post 的请求是放在请求体中,而 get 请求是拼接在 url 中
- get 请求传递的数据会有限制,但是 post 没有
get 请求的请求结果可以被缓存,而 post 的不可以,或很少有
put 和 post 的区别
语义不同
- put 是幂等的,post 不是
- put 不能有响应 body ,但是 post 可以有