我知道您不希望使用用户名和密码发布表单,任何人都可以使用历史记录查看或可能不需要重复操作的情况(刷新页面=将项目添加到购物车可能不是需要的话)。所以当我想要使用一个而不是另一个时,我有一个理解。但是我总是可以让服务器在GET之后重定向URL以解决购物车问题,也许我的大多数表单都可以与GET完美配合。
我为什么要在GET上使用POST?我不明白一方面的好处。我注意到POST不会将数据添加到历史记录/ URL,并会警告您刷新页面,但这些是我所知道的唯一两个区别。为什么作为开发人员我可能想要使用其中一个?
答案 0 :(得分:9)
每个HTTP方法:POST,GET,PUT,DELETE等都会篡改自己的语义。在选择正确的方法时,了解HTTP和REST非常重要,因为这是HTTP的工作方式以及网络基础设施运行的方式。
有关REST的优秀教程here。以下是有关POST和GET方法的内容:
因为每个资源使用相同的接口,所以您可以依赖于能够使用GET检索表示 - 即一些呈现。因为GET的语义是在规范中定义的,所以当你调用它时你可以确定你没有义务 - 这就是为什么这个方法被称为“安全”的原因。 GET支持非常高效和复杂的缓存,因此在许多情况下,您甚至不必向服务器发送请求。您还可以确保GET是幂等的 - 如果您发出GET请求并且没有得到结果,您可能不知道您的请求是否从未到达目的地或者回复在返回给您的途中丢失了。
幂等保证意味着您可以再次发出请求。 PUT也保证了幂等性(这基本上意味着“用这些数据更新这个资源,或者如果它已经不存在就在这个URI上创建它”)和DELETE(你可以一次又一次地尝试直到你得到一个结果 - 删除不存在的东西没有问题)。 POST,通常意味着“创建新资源”,也可用于调用任意处理,因此既不安全也不是幂等 。
答案 1 :(得分:6)
如果您想要idempotent请求URI(即响应始终相同),请使用GET,否则使用POST。
答案 2 :(得分:5)
GET
请求中的所有数据都在URL中携带,该URL具有大小限制并且对用户也是可见的。 POST
请求也允许您发送有效负载。
除技术差异外,还有意图问题。 HTTP标准描述了旨在使用不同请求(GET
,POST
,PUT
,DELETE
,HEAD
)的方式;例如,PUT
旨在添加资源,DELETE
旨在删除资源,POST
旨在修改资源。您可以使用GET
请求而不是PUT
或DELETE
吗?当然,但遵循标准会使意图明确。
有关详细信息,请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html。
答案 3 :(得分:1)
除其他外,GET限制为2K(某些浏览器会接受更多),并且它在URL中可见
答案 4 :(得分:0)
GET和POST具有语义含义 - GET用于检索资源,POST用于修改资源。语义是您注意Web浏览器中实现差异的原因 - 因为POST涉嫌修改数据,浏览器应该在重新提交POST请求/命令之前发出警告。
整个网络都依赖于这些语义。缓存GET请求是安全的,但不是POST命令 - 这就是缓存代理所做的事情。多次获取资源是安全的,所以你有链接预取器就可以做到这一点。书签和刷新GET是安全的,因此没有来自浏览器等的警告等。
也就是说,没有安全性差异 - 因此您提供的用户名密码示例并不完全准确。 POST很容易被篡改或被视为GET。