http post,get,put,delete区别(收集整理)
摘要:
这篇文章想从restful角度来分析下http的方法get,post,put,delete的区别。先暂时收集下资料~~~
一 Http 规范中的get与post
根据 HTTP 规范,GET 用于信息获取,而且应该是安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。 比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。
根据 HTTP 规范,POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的修改应该通过 POST 请求实现,因为在注解提交之后站点已经更新了文章。
二 Get 与Post的功能
Get:用来向服务器申请请求URI所指定资源的信息。如果请求URI只是一个数据产生过程,那么最终要在响应实体中返回的是处理过程的结果所指向的资源,而不是处理过程的描述。
Post:用来向目的服务器发出请求,要求它接受被附在请求后的实体,并把它当作请求队列中请求URI所指定资源的附加新子项,Post被设计成用统一的方法实现下列功能:1. 对现有资源的解释2. 向电子公告栏、新闻组、邮件列表或类似讨论组发信息。3. 提交数据块 4. 通过附加操作来扩展数据库
从从上面描述可以看出,Get是向服务器发索取数据的一种请求;而Post是向服务器提交数据的一种请求,要提交的数据位于信息头后面的实体中。
三 HTTP请求:get与post方法的区别
相同点:
Get与post请求的相应是可缓存的;
备注:如果post有cache-control或者expires头域指示其相应不可缓存
不同点:
1. 功能不同--Get是从服务器上获取数据,post是向服务器传送数据
2. 参数存放位置不同--get请求提交的数据放置在HTTP请求协议头中,而post提交的数据则放在实体数据数据中。Get是把参数数据队列加到提交表单的action属性所指定的URL中,值和表单中各个字段一一对应,在URL中可以看到,post是通过HTTP post机制,将表单内各个字段与其内容放置在html header内一起传送到action属性所指的URL地址,用户看不到这个过程;get安全性非常低,post安全性较高。
3. 传输数据量阈值不同--get传送的数据量较小,不能大于2kb;post传送的数据量较大,一般被默认为不受限制的。GET方法由于受到URL长度的限制,只能传递大约1024字节;POST传输的数据量大,可以达到2M,而根据微软方面的说法,微软对用 Request.Form() 可接收的最大数据有限制,IIS 4 中为 80 KB 字节,IIS 5 中为 100 KB 字节;
4. 安全性不同--get安全性非常低;post安全性较高,这点有点扯淡,post也就安全那么一点点,随便抓个包,或者浏览器调试工具都能看到,除非用ssl,或者加密。
6. form表单功能不同--在form提交的时候,如果不指定method,则默认为get请求,form中提交的数据将会附加在url之后,以?与URL分开。字母数字字符原样发送,但空格转换为“+”号,其它符号转换为%xx,其中xx为该符号为16进制表示的ASCII(或ISO Latin-1)值;获取表单数据时,
ASP中,get方式的提交需要用Request.QueryString来取得变量的值,而post方式提交时,必须通过Request.Form来访问提交的内容
Java中,get方式的提交需要用Request.getUrl来取得变量的值,而post方式提交时,必须通过Request.getParameter来访问提交的内容
7. SOAP协议--SOAP是依赖于HTTP POST模式实现的;
四 Restful中get,post,put,delete
五、graphql
现在 graphql 更加适合于新的项目,因为接口更加独立,部分简单的CRUD操作,只要数据库建好,前端和后端甚至不需要进行接口商定,通过graphql 就可以直接进行数据库的操作。
但是如果涉及复杂的业务逻辑,还是需要后端加入。
备注:本文为网上资料整理,如在引用中侵权,请联系我~~~谢谢