【问题标题】:Should i not do write actions via GET?我不应该通过 GET 写操作吗?
【发布时间】:2011-01-22 17:32:14
【问题描述】:

我被告知永远不要使用 GET 请求进行写操作。并且搜索引擎和其他机器人会跟随并激活它们。假设所有写入操作都需要登录,将获取请求作为链接会有问题吗?

【问题讨论】:

    标签: html search-engine bots


    【解决方案1】:

    登录不会保护用户免受浏览器、浏览器插件(包括链接预览器)、“网络加速器”甚至代理服务器进行链接预取的危险。

    【讨论】:

    • 哦。使用 ajax 的 GET 怎么样?谢天谢地,我接受了建议并将它们更改为发布,但我很想知道您是否知道网络加速器是否会使用 ajax get 获取数据
    • @acidzombie24 我从来没有听说过这种情况,并且认为它不太可能发生,但是任何改变数据的 GET 请求都可能会咬你,AJAX 与否。例如,如果浏览器发出的请求最终进入缓存,则该缓存有可能被静默“刷新”作为性能辅助。我并不是说这很可能。只是没有必要担心 POST 的所有这些疯狂场景——这就是它存在的原因。
    【解决方案2】:

    不仅机器人,普通浏览器对 GET 请求的行为也不同。当您在使用 POST 的页面上使用“后退”按钮时,大多数浏览器都会警告您重新发送请求将再次执行(假定)写入操作。 GET 没有这样的事情,因为假定 GET 不会改变任何东西。

    【讨论】:

      【解决方案3】:

      使用 GET 写入违反了REST。这样做有更根本和哲学上的原因,而不仅仅是因为机器人会跟随它们。但这并不意味着它是不允许的。

      GET 不应导致写入操作的原因是,在 RESTful 服务中,有一个隐含的协议,即 GET 是“安全的”,不会导致远程发生任何事情。 GET 仅用于获取信息。如果要发送信息,请使用 POST。

      【讨论】:

      • +1 提到遵守法律的充分理由和法律不是绝对的。
      • 嗯。我有一个名为 watch user 的操作,它链接到 /watch_user?action=<true or false>&id=<user_to_watch_id>&tok=<RandomCookieValueSoImageCantTriggerThis> 这会很糟糕吗?它可以撤消。
      • 我可以,但我没有看到 get 的问题,因为注销也会执行写入操作(取决于 webapp)。我喜欢 get ,因为如果用户退出,我可以要求登录,而不是让他重做 watch 操作。 -edit- 我想我可以使用 post,因为 RandomCookieValueSoIma​​geCantTriggerThis 可能会更改每次登录。
      • 如果使用 GET 编写与 REST 相悖,那么您建议如何跟踪某篇文章或论坛帖子的浏览量?我看不到任何其他方式。
      猜你喜欢
      • 2014-04-12
      • 1970-01-01
      • 2016-11-29
      • 2011-04-30
      • 1970-01-01
      • 2016-06-30
      • 2019-06-04
      • 1970-01-01
      • 2010-09-22
      相关资源
      最近更新 更多