【问题标题】:Is it true that POST can be used instead of GET in all scenarios?是不是在所有场景中都可以使用 POST 而不是 GET?
【发布时间】:2014-03-08 06:59:49
【问题描述】:

我已经阅读了很多关于 GET 和 POST 之间差异的文章。 StackOverflow 上提供了很多。

重要区别总结如下:

  • Post 可以通过 body 发送其信息,而 GET 不应该(但我认为实际上可以做到)
  • 某些浏览器会缓存 GET 结果并依赖 GET 请求的幂等行为。
  • 对于大多数开发人员来说,使用 GET 比使用 POST 容易得多。

总结这个总结,在 POST 情况下使用 GET 是不好的和危险的。 但是是否真的忽略了简单性,POST 可以用作 GET 请求的替代品,因为它似乎完全涵盖了 GET 要求。

为了澄清我没有发疯!我不会使用 POST 来代替 GET。这个问题只是为了检查我是否正确理解了 GET 和 POST 的区别。

【问题讨论】:

  • 获取某物意味着获取/拉动(朝向您)。发布某些东西意味着推(远离你)所以仅从这一点,就应该清楚这些是具有不同语义的不同事物。见w3.org/Protocols/rfc2616/rfc2616-sec9.html
  • @Gordon 你是对的。我的问题是这些动词是否有任何约束逻辑?例如,我想在我的 ajax 请求上使用自定义 TAKE 关键字,并且在服务器端对此类请求执行 GET 操作。如果是这样会怎样?
  • 是的,存在受限逻辑。请参阅发布的链接。它们有不同的语义,它们应该遵守,比如 GET 应该避免副作用。每当通过它检索资源时,用户应该能够依赖获得相同的结果。 POST 不是。通过它创建新资源时,响应应该不同,例如返回的资源表示等。

标签: http post get httprequest


【解决方案1】:

不,POST 不能替代 GET 请求。 POST 请求不能做 GET 请求可以做的两件事。

  1. 您不能仅通过在浏览器的地址栏中键入 URL 来生成 POST 请求。这总是会生成一个 GET 请求。
  2. 您不能使用 HTML 中的普通链接生成 POST 请求。这会产生深远的影响。您找不到只能通过任何搜索引擎使用 POST 请求访问的页面,并且您无法链接到该页面,除非它是通过 HTML 表单或使用 Javascript 完成的。

【讨论】:

  • 我正在开发 SPA 应用程序。在这种情况下,页面上没有链接。一切都只是通过 JavaScript 路由或绑定元素的点击事件。在 SPA 的情况下是否可以这样做?
  • 是的,在单页应用程序中,开发人员通常只成功使用 POST 请求。它减少了与浏览器可能的缓存相关的麻烦,并且您不必决定为每个请求使用什么。 OTOH,有时您想要浏览器缓存的好处。
【解决方案2】:

对交易进行分类是一种很好的做法。当您开发面向 API 服务的架构甚至单页应用程序时,这些方法非常重要。

GET - 用于检索数据集。 (也有 url 长度的限制。参数被暴露和 urlencoded。) POST - 保存/添加(这样更安全)

前:

GET /items - means you are getting the list of items. 
POST /items - means you are saving/adding item(s)

以后您可能还需要学习 PUT 和 DELETE。

但是现在,在保存/添加数据时,请始终在表单或 ajax 请求中使用 POST。和 GET 检索数据时。

【讨论】:

    猜你喜欢
    • 2011-08-04
    • 2010-09-07
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多