get、post、put、delete区别与含义

本文解析了HTTP协议的基础概念,包括其基于TCP的可靠性、GET、POST等请求方法的区别及语义特性,介绍了幂等性的概念及其在HTTP方法中的体现,并探讨了RESTful风格的设计原则和优势。

好久没写博客了,都快长草了。

最近读了http的入门书籍《图解HTTP》,虽然仍然是一知半解,但是总得写点东西加深一下印象。


语义

http协议是基于tcp协议的应用层协议,tcp协议作为可靠的传输层协议,因此http协议也是可靠的。

日常开发过程中,最常用的是get post put delete,在http协议的规定中,这四个method属于标准的crud,分别代表了增删改查,存在着语义上的差别。

当然你要是乐意的话,用post获取,用get去做增改也是可以的。只不过不推荐如此罢了。

因为主要是语义上的差别,因此在传输层上来看的话,get和delete post和put是没有任何区别的。不过把应用层协议放到传输层上来看,本身就是一件比较扯的事。

值得一提的是在部分浏览器下,post会发送两个数据包,get只发送一个。这也是有些文章推荐全部用get做优化,不过大部分项目规模都不大,这点优化带来的性能提升几乎看不见。


幂等性

幂等性的概念来自于数学(好像编程都是来自数学,数学家最厉害,研究出来一些东西之后,各位大牛实现成拓展,我们这种去用一下,不求甚解)。

幂等性指的是相同参数的重复执行,获得的副作用都是一致的。譬如get方式获取某个帖子,帖子id不变的话,造成的副作用肯定是一致的,自然是符合幂等的。需要注意的是,这里强调的是相同的副作用,并不是相同的内容。譬如帖子被删除了,再次访问肯定是没有结果的,但是造成副作用仍然是一致的。

同理,无论是put方法去更新一个帖子,还是delete方法去删除一个帖子,无论执行多少次,副作用也全部是一致的。自然也是幂等的。

post方法是最奇特的,毕竟是创建一个帖子,在创建之前,自然不可能得知这个帖子的id。另外三种都是对应资源的uri,唯有post对应的是创建资源的实体。如果访问多次,那么就会创建多个帖子,造成的副作用是不一样的(对应的帖子的id发生了变化,就像往数据库插入相同的记录,id是一直在自增的)。也就是说post不是幂等的。

不过有很多方法去避免这个情况的发生:可以在先生成一个随机字符串存到session、并且埋在表单的隐藏域中,接收到表单提交的数据之后,首先检测这个随机字符串是否存在,如果存在就验证通过、并删除该session,不存在即可认为是重复提交。

还有个思路,在表单提前埋入一个ticket,这个ticket直接和当前操作绑定,提交之后先去判断该ticket是否已经使用,未使用就创建一个资源,已使用就不进行操作。这个ticket肯定要做持久化存储,不过相对于带来的好处,这点资源的消耗是完全可以接受的。

从网上找了一个图:


RESTful

先说下关于restful的概念

1、网络上的所有事物都被抽象为资源(resource);

2、每个资源对应一个唯一的资源标识(resource identifier);

3、通过通用的连接器接口(generic connector interface)对资源进行操作;

4、对资源的各种操作不会改变资源标识;

5、所有的操作都是无状态的(stateless)。

RESTful是一种架构设计风格,提供了设计原则和约束条件,而不是架构。而满足这些约束条件和原则的应用程序或设计就是RESTful架构或服务。是基于http(RPC 是基于TCP协议的)建立的一种接口规范,核心就是资源。目前api开发中,最常用的就是RESTful风格,也就是采用了这个机制。仅仅是看一下这个url就能猜测出对应的方法的作用,省去了大量的理解接口之间逻辑的时间。最大的好处由于RESTful强制所有的操作都必须是stateless的,这就没有上下文的约束,如果做分布式,集群都不需要考虑上下文和会话保持的问题,极大的提高了可伸缩性。



### 回答1: GETPOSTPUTDELETE 是四种不同的 HTTP 方法。 - GET 请求用于获取服务器上的资源。GET 请求是幂等的,意味着多次发送相同的 GET 请求不会对服务器上的资源造成影响。 - POST 请求用于向服务器提交数据。POST 请求不是幂等的,意味着多次发送相同的 POST 请求可能会对服务器上的资源造成影响。 - PUT 请求用于更新服务器上的资源。PUT 请求也是幂等的。 - DELETE 请求用于删除服务器上的资源。DELETE 请求也是幂等的。 ### 回答2: 在Web应用程序开发中,HTTP协议是非常重要的一种协议。它定义了客户端和服务器之间的通信规则,让Web应用程序能够通过HTTP标准接收和发送数据,支持通用的Web服务。 HTTP协议提供了一些基本操作,即getpostputdelete,这些操作在Web API中有着不同的作用。这些方法定义了客户端可以向服务器发送的不同类型的请求,以及服务器应该如何响应这些请求。 1. GET方法 GET方法是HTTP协议中最常见的方法,也是最基本的获取信息的方法。该方法请求指定的资源,并返回它。客户端向服务器发送一个GET请求,服务器将返回请求的资源。GET方法通常用于获取某个资源的信息。 GET请求只是获取资源,不会修改它。因此,它是一种“安全”方法,不会对存储在服务器上的资源进行任何修改。GET方法通常用于在浏览器中获取网页内容、获取API数据等。 2. POST方法 POST方法是HTTP协议中第二个常见的方法,它通常用于向服务器提交数据。该方法在请求主体中包含数据,服务器接收到该请求后,会处理请求,根据该请求来不同的响应。 POST方法GET方法不同,它会修改存储在服务器上的资源。因此,它是一种“非安全”方法,可能会引起潜在的问题,例如重复提交表单、错误的数据库更新等。 3. PUT方法 PUT方法是HTTP协议中的一种方法,它允许客户端向服务器提交新资源、更新现有资源或替换现有资源。PUT方法是一种更加强制的请求方法,不仅包含请求主体数据,还包含资源相关的信息。 PUT方法主要用于更新数据,其典型用例包括更新客户端服务器之间的数据、更新数据库记录等。PUT方法是一种“幂等”方法,即每个请求的结果都是相同的,不管请求的次数。 4. DELETE方法 DELETE方法是HTTP协议中的一种方法,它用于删除存储在服务器上的资源。PUT方法一样,DELETE方法也是一种更加强制的请求方法,包含资源相关的信息。DELETE方法是非安全的,因为它会删除存储在服务器上的资源。 常见的用例包括从数据库中删除记录、删除服务器上的文件等。DELETE方法是一种“幂等”方法,即每个请求的结果都是相同的,不管请求的次数。 总之,GET方法主要用于获取信息,POST方法主要用于向服务器提交数据,PUT方法主要用于更新数据,DELETE方法主要用于删除数据。在开发Web API时,根据具体需求选择正确的HTTP方法,可以提供更好的用户体验和服务。 ### 回答3: getpostputdelete是常见的HTTP动词,用来表示HTTP请求的不同方式以及对服务器上的资源进行不同的操作。它们之间的区别主要在以下几个方面: 1. 请求方式:GETPOST是最常用的两种HTTP请求方式。GET用于请求资源,而POST用于提交数据。PUTDELETE则用于对服务器上的资源进行修改或删除操作。 2. 请求参数:GET请求参数会附加在URL的后面,而POST请求参数则包含在请求体中。PUTDELETE请求也可以携带参数,但是它们通常会有一个指定的资源URL。 3. 安全性:GET请求对服务器上的资源只是进行读取操作,比较安全。而POSTPUTDELETE操作可能会对服务器上的资源进行修改或删除,需要用户进行一定的授权或身份验证。 4. 幂等性:幂等性是指对资源进行相同的操作时,结果应该是相同的。GETDELETE请求都是幂等的,即对同一个资源多次请求结果不会发生改变。而POSTPUT请求则不一定是幂等的,因为多次请求可能会导致资源状态不一样。 总结而言,GET用于获取资源,POST用于提交数据,PUT用于修改资源,DELETE用于删除资源。每种请求方式都有其适用场景,我们在进行Web开发时需要结合需求和实际情况来选择合适的请求方式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值