【问题标题】:GET vs POST where to use which methodGET vs POST 在哪里使用哪种方法
【发布时间】:2017-01-06 01:47:20
【问题描述】:

对于将GETPOST 用于Ajax 调用的理想情况,我有点困惑。以前当我们使用ASP.NET MVCKnockoutJS 时,我们曾经将自定义$.postJson(url,data,callback)jQuery 调用到我们的MvcController(即使是GET 操作)。最近我们使用ASP.NET Web APIAngularJS 和使用$http(url,method)GET 并在我们的url 属性中传递搜索参数,并使用ApiController 属性在ApiController 中捕获它们。

现在我的问题是,使用GETPOST 的理想场景和最佳实践应该是什么(附注:不要从CRUD 运营角度回答)。

【问题讨论】:

    标签: angularjs asp.net-mvc rest asp.net-web-api


    【解决方案1】:

    这些方法应该在服务器端做什么有一个正式的定义:https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

    由于这个正式的定义,任何理想的答案最终都不可避免地听起来像一个 CRUD 答案。 GET 不应该修改数据,它应该只检索数据。 POST 旨在更改服务器上的数据。

    实践中,我们经常发现自己使用 POST 作为解决方法,因为 GET 被有效地限制在请求中包含内容主体。许多数据检索场景可能需要将内容正文发送到服务器。您还可能在某些 GET 场景中遇到 URL 长度问题,这可能会导致您在 POST 中发送数据。因此,如果您尝试检索数据,请首选 GET 并在需要的地方使用 POST。

    虽然我可能会使用 POST 来解决 GET 对数据检索的限制,但我从不使用 GET 来修改数据。

    【讨论】:

    • 点赞!几乎总结了一切。谢谢!
    【解决方案2】:

    如果您要添加和更新,请使用 POST。 如果要获取,请使用 GET。

    最佳实践: 登录时,使用 POST 提交凭据,隐藏用户名/密码不被嗅探。

    【讨论】:

    • POST 不保护用户名和密码不被“嗅探”它可能会将其隐藏在查询字符串中,但仍然可以访问。 PUT 也用于更新,POST 用于插入(如果查看最佳实践)
    • 老实说,我真的不知道为什么他们以前只使用 $.postJson (即使是搜索操作)。我试图对抗,但似乎每个人都在使用它而没有想太多。