HTTP 方法
HTTP1.0 定义了三种请求方法:GET,POST 和 HEAD 方法
HTTP1.1 新增了六种请求方法:OPTIONS,PUT,PATCH,DELETE,TRACE 和 CONNECT
这些方法的具体作用是什么?
方法 | 描述 |
---|---|
GET | 通常用于请求服务器发送某些资源 |
POST | 发送数据给服务器 |
HEAD | 请求资源的头部信息,并且这些头部与 HTTP GET 方法请求时返回的一致 该请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载,以此可以节约带宽资源 或者是欲判断某一资源是否存在,使用 HEAD 要比 GET 要更好一些 |
OPTIONS | 当发起跨域请求时,浏览器常发送 OPTIONS 预请求,用于检测服务器允许的 http 方法 若服务器接受该跨域请求,浏览器才会继续发送正式请求 |
PUT | 发送数据给服务器 |
PATCH | 用于对资源进行部分修改 |
DELETE | 用于删除指定的资源 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
CONNECT | 其作用就是将服务器作为代理,让服务器代替用户去访问其他页面(说白了就是翻墙),然后将数据返回给用户 |
幂等概念
定义:同一个请求方法执行多次和仅执行一次的效果完全相同,即为幂等
GET 和 POST 有什么区别?
区别 | 描述 |
---|---|
数据传输方式不同 | GET 请求通过 URL 传输数据,而 POST 的数据通过请求体传输 |
安全性不同 | POST 的数据因为在请求主体内,所以有一定的安全性保证 而 GET 的数据在 URL 中,通过历史记录很容易查到数据信息 |
特性不同 | GET 是安全(这里的安全是指只读特性,就是使用这个方法不会引起服务器状态变化)且幂等 而 POST 是非安全非幂等 |
GET 无害 | 刷新、后退等浏览器操作 GET 请求是无害的,POST 可能重复提交表单 |
数据类型不同 | GET 只允许 ASCII 字符,而 POST无限制 |
PUT 和 POST 都是给服务器发送新增资源,有什么区别?
最主要的区别是:PUT 是幂等的,而 POST 非幂等
除此之外还有一个区别,通常情况下,PUT 的 URI 指向是具体单一资源,而 POST 可以指向资源集合
举个例子,我们在开发一个博客系统,当我们要创建一篇文章的时候往往用
POST
https://www.jianshu.com/articles
,这个请求的语义是,在 articles 的资源集合下创建一篇新的文章,如果我们多次提交这个请求会创建多个文章,这是非幂等的而
PUT
https://www.jianshu.com/articles/123456
的语义是更新对应文章下的资源(比如修改作者名称等),这个 URI 指向的就是单一资源,而且是幂等的,比如你把『刘德华』修改成『彭于晏』,提交多少次都是修改成『彭于晏』
PS:『POST表示创建资源,PUT表示更新资源』这种说法是错误的,两个都能创建资源,根本区别就在于幂等性
PUT 和 PATCH 都是给服务器发送修改资源,有什么区别?
区别一:PUT 是幂等的,PATCH 是非幂等的
区别二:PUT 和 PATCH 都是更新资源,而 PATCH 用来对已知资源进行局部更新
比如我们有一篇文章的地址 https://www.jianshu.com/articles/123456
,这篇文章的可以表示为:
article = {
author: "lzw",
age: 18,
id: 007,
};
当我们要修改文章的作者的年龄时,我们可以直接发送 PUT 请求:https://www.jianshu.com/articles/123456
,这个时候的数据应该是:
article = {
author: "lzw",
age: 20,
id: 007,
};
如果你不想每次都带有这么多无用的信息,那么可以发送 PATCH 请求:https://www.jianshu.com/articles/123456
,这个时候只需要:
article = {
age: 20,
};