【问题标题】:post/redirect/get发布/重定向/获取
【发布时间】:2010-12-27 09:18:41
【问题描述】:

在制作基于 Web 的数据输入系统时,在决定是否使用 post/redirect/get 设计时,是否为每个页面添加额外的服务器请求是一个重要问题?

【问题讨论】:

    标签: html post-redirect-get


    【解决方案1】:

    请求本身不是问题,尤其是替代方案会带来非常糟糕的用户体验。

    但是,当使用具有负载平衡和/或数据库复制的站点时,您需要注意确保 POST 之后的 GET 将看到已发布的数据。

    使用负载平衡和缓存时,有时会通过将同一用户引导到同一台计算机的“粘性会话”来解决此问题,因此存储在该计算机上的直写​​缓存中的数据将是最新的。

    使用数据库复制时,POST 之后的 GET 请求可能需要直接从“主”数据库读取,而不是像往常一样从本地“辅助”数据库读取。

    【讨论】:

    • 另一种选择是使用数据库镜像而不是复制,并使用 memcached 进行缓存。那么用户被重定向到哪个前端都没有关系。
    • 感谢您提供额外的思考!
    【解决方案2】:

    如果我理解您的问题(而且我不完全确定我是否理解),那么在发布后进行重定向绝对是一个不错的设计,即使您向他们显示包含更新信息的同一页面。

    通过执行重定向,您正在断开正在查看的页面与导致更改的 POST 之间的连接。用户可以添加书签和/或刷新页面,而不会弹出询问“您要重新发送数据吗?”

    【讨论】:

    • 我不知道您使用的是什么语言/框架/服务器,但是网上有无数可能的语言示例。只需搜索 POST/REDIRECT/GET。 Here is the Wikipedia 页面就可以了。
    • 我已经阅读了所有此类文章,但仍然无法理解。我在这里理解的是:在 abc.php
      然后在 xyz.php 我应该使用 $x=$_POST['']; 收集数据然后重定向到 abc.php 并使用 $x=$_GET[''];再次收集数据?这很混乱。
    • 没有。 POST/REDIRECT/GET(这些是 HTTP 命令,不是 PHP 全局变量)是为了避免有人填写表单,提交(POST),登陆的问题关于“谢谢!”页面,然后在“谢谢!”上点击刷新 浏览器询问,“你想重新提交你的数据”(或其他什么),大多数 bozos 不会阅读/理解,只需单击“是”,因为他们总是这样做。因此,数据再次被发送到站点,这可能不是您想要发生的。 REDIRECT 使它们位于“安全”页面上,即无需重新提交数据。
    • 是的,我了解发生了什么错误。我长期面临这些问题。我已经阅读了数千篇用图表解释它的文章。但是没有人给出一个可行的例子。当用户提交表单时,我有一个 php 页面,即 xyz.php,同一页面收集数据并进入数据库。但是当用户刷新页面时,他会收到重新提交数据消息。那么我应该创建另一个像 abc.php 这样的 php 页面并在那里收集数据然后使用 header("Location:xyz.php"); & 然后在 xyz.php 中使用 $_GET 和?
    • 这里有 3 页可供查看:关于该主题的 2 次 SO 对话(4 岁以上并带有示例)herehere,以及 google search result(73+ 百万命中)。我已经完成了。
    【解决方案3】:

    大多数情况下,只有在数据更改时才会发布帖子。网站上最多的流量和 CPU 时间是由查询 (GETS) 而不是更改产生的,所以我认为这些额外的请求并不是很重要。

    【讨论】:

      【解决方案4】:

      我认为它提供的可用性超过了对性能的小幅影响。

      【讨论】:

        【解决方案5】:

        通过执行一些性能基准对其进行测试,您将能够查看在您的特定情况下它是否会成为一个问题。请参阅this article 了解更多信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-21
          • 1970-01-01
          • 2011-05-19
          • 1970-01-01
          • 2012-01-18
          • 1970-01-01
          • 2023-04-01
          相关资源
          最近更新 更多