它们似乎都在向身体内部的服务器发送数据,那么它们有什么不同呢?
当前回答
据我所知,PUT主要用于更新记录。
POST -创建文档或任何其他资源 PUT—更新创建的文档或任何其他资源。
但要清楚的是,PUT通常“替换”现有的记录,如果它在那里,如果它不在那里创建。
其他回答
实际上,除了他们的头衔之外,没有什么不同。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方法没有任何限制,您的内容不需要以任何方式更改或操作。
POST被认为是某种工厂类型的方法。您将数据包含在其中以创建您想要的内容,而另一端的任何内容都知道如何使用它。PUT用于更新给定URL上的现有数据,或者当您知道URI将是什么并且它还不存在时创建一些新的东西(与POST相反,POST将创建一些东西并在必要时返回URL)。
Post和Put主要用于发布数据和其他更新数据。但是你可以只对post request做同样的事情。
其他人已经发布了很好的答案,我只是想补充一点,在大多数语言、框架和用例中,你会更多地使用POST,而不是PUT。PUT、DELETE等基本都是鸡毛蒜毛的问题。
值得一提的是,POST容易受到一些常见的跨站请求伪造(CSRF)攻击,而PUT则不会。
当受害者访问attackersite.com时,下面的CSRF是不可能的。
攻击的效果是,受害者无意中删除一个用户,只是因为它(受害者)在访问attackersite.com之前以admin身份登录target.site.com:
attackersite.com上的恶意代码:
案例1:正常请求。保存的target.site.com cookie将自动由浏览器发送:(注意:只支持PUT,在端点,是更安全的,因为它是不支持<form>属性值)
<!--deletes user with id 5-->
<form id="myform" method="post" action="http://target.site.com/deleteUser" >
<input type="hidden" name="userId" value="5">
</form>
<script>document.createElement('form').submit.call(document.getElementById('myform'));</script>
案例2:XHR请求。保存的target.site.com cookie将被浏览器自动发送:(注意:只支持PUT,在端点,是更安全的,因为尝试发送PUT将触发一个preflight请求,其响应将阻止浏览器请求deleteUser页面)
//deletes user with id 5
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://target.site.com/deleteUser");
xhr.withCredentials=true;
xhr.send(["userId=5"]);
MDN Ref: [..]与“简单请求”(上面讨论过)不同,——[[意思是:POST/GET/HEAD]]——,对于“预飞行”请求,浏览器首先使用OPTIONS方法发送一个HTTP请求[..]
Cors在行动:[..]某些类型的请求,如DELETE或PUT,在发出实际请求之前需要进一步请求服务器的许可。]所谓的飞行前请求[..]
推荐文章
- 什么是HTTP“主机”报头?
- 哪个HTTP状态代码表示“尚未准备好,稍后再试”?
- 如何阻止恶意代码欺骗“Origin”报头来利用CORS?
- 为什么说“HTTP是无状态协议”?
- 我需要HTTP GET请求的内容类型报头吗?
- 如何让Chrome允许混合内容?
- 正确的方式删除cookies服务器端
- REST DELETE真的是幂等的吗?
- 了解Chrome网络日志“停滞”状态
- jQuery发布JSON
- 用户代理字符串可以有多大?
- 什么是接受* HTTP报头q=0.5 ?
- HTTP状态码200(缓存)和状态码304之间有什么区别?
- HTTP POST返回错误:417“期望失败。”
- 什么是HTTP中的“406-不可接受的响应”?