它们似乎都在向身体内部的服务器发送数据,那么它们有什么不同呢?


当前回答

给出rest风格资源的示例:

带有一堆图书信息的POST /books可能会创建一本新书,并响应标识该图书的新URL: /books/5。

PUT /books/5必须创建一个ID为5的新书,或者用ID 5替换现有的书。

在非资源风格中,POST可以用于几乎任何具有副作用的事情。另一个区别是PUT应该是幂等的:同一个数据的多个PUT到同一个URL应该没问题,而多个POST可能会创建多个对象或POST操作所做的任何事情。

其他回答

PUT是一种将内容“上载”到特定URI或覆盖该URI中已有内容的方法。

另一方面,POST是提交与给定URI相关的数据的一种方式。

参考HTTP RFC

Post和Put主要用于发布数据和其他更新数据。但是你可以只对post request做同样的事情。

PUT和POST都是休息方法。

PUT——如果我们使用PUT两次发出相同的请求,两次都使用相同的参数,那么第二次请求将没有任何影响。这就是为什么PUT通常用于Update场景,使用相同的参数多次调用Update不会比初始调用做更多的事情,因此PUT是幂等的。

POST不是幂等的,例如Create将在目标中创建两个独立的条目,因此它不是幂等的,因此Create在POST中被广泛使用。

每次使用具有相同参数的POST进行相同的调用将导致发生两种不同的情况,因此POST通常用于Create场景

实际上,除了他们的头衔之外,没有什么不同。GET和其他方法之间实际上有一个基本的区别。使用“GET”-Request方法,发送url地址行中的数据,首先用问号分隔,然后用&符号分隔。

但是使用“POST”-request方法,您不能通过url传递数据,而是必须将数据作为请求的所谓“主体”中的对象传递。在服务器端,您必须读取接收到的内容正文,以便获得发送的数据。 但另一方面,当你发送"GET"-Request时,就不可能在body中发送内容。

“GET”只用于获取数据而“POST”用于发布数据的说法是绝对错误的。没有人可以阻止你创建新的内容,删除现有的内容,编辑现有的内容或做任何在后端,基于数据,这是由“GET”请求或由“POST”请求发送。没有人能阻止你在后端编码,用一个"POST"-Request,客户端请求一些数据。

对于请求,无论使用哪种方法,您都调用URL并发送或不发送一些数据来指定,您希望将哪些信息传递给服务器以处理您的请求,然后客户端从服务器获得一个答案。数据可以包含你想要发送的任何东西,后端可以对数据做任何它想做的事情,响应可以包含任何你想要放在那里的信息。

只有这两个基本方法。GET和POST。但使它们不同的是它们的结构,而不是你在后端编写的代码。在后端,您可以使用接收到的数据编写任何您想要的代码。但是使用“POST”请求,你必须在正文中发送/检索数据,而不是在url-addressline中,而使用“GET”请求,你必须在url-addressline中发送/检索数据,而不是在正文中。这是所有。

所有其他的方法,比如"PUT", "DELETE"等等,它们都有和"POST"相同的结构。

如果你想隐藏一些内容,POST方法主要被使用,因为无论你在url-addressline中写什么,这都将被保存在缓存中,GET-Method与用数据写url-addressline是一样的。因此,如果你想发送敏感数据,不一定总是用户名和密码,但例如一些id或哈希,你不希望显示在url地址行,那么你应该使用POST方法。

此外,URL-Addressline的长度被限制为1024个符号,而“POST”-方法则不受限制。因此,如果数据量较大,则可能无法使用GET-Request发送数据,而需要使用POST-Request。这也是post请求的另一个优点。

但是当您没有复杂的文本要发送时,处理get请求要容易得多。 否则,这是POST方法的另一个优点,使用get方法,您需要对文本进行url编码,以便能够在文本甚至空格中发送一些符号。但是使用POST方法没有任何限制,您的内容不需要以任何方式更改或操作。

据我所知,PUT主要用于更新记录。

POST -创建文档或任何其他资源 PUT—更新创建的文档或任何其他资源。

但要清楚的是,PUT通常“替换”现有的记录,如果它在那里,如果它不在那里创建。