【问题标题】:Resending POST data [closed]重新发送 POST 数据 [关闭]
【发布时间】:2014-03-29 09:24:59
【问题描述】:

我有以下 2 个关于浏览器行为的问题。

  1. 当我们使用浏览器的刷新按钮或 F5 键重新发送表单时,为什么浏览器在不希望出现这种行为时再次发送发布数据(即再次将相同的产品添加到购物车)?

  2. 为什么我在 FireFox 中点击了“清除您最近的历史记录”后仍然发送帖子数据?

【问题讨论】:

  • 提交后重定向到其他页面会阻止重新提交...
  • 在这种情况下使用 ajax

标签: html http http-post


【解决方案1】:

为什么当我们使用浏览器的刷新按钮或 F5 键重新发送时,浏览器会再次发送发布数据,而这种行为是不可取的(即再次将相同的产品添加到购物车)?

因为浏览器不知道这是不可取的。它被要求重复上一个请求,所以它会这样做。

为什么我在 FireFox 中点击“清除您最近的历史记录”后 F5 后仍在发送帖子数据?

因为关于如何请求页面的详细信息存储在与当前页面以及历史相关的某些数据结构中。


如果您不想刷新页面以重复 POST 请求,请使用 POST-Redirect-GET pattern

使用 302 重定向响应 POST 请求。浏览器将向您重定向到的 URL 发出 GET 请求。重复该请求将重复 GET 请求,而不是 POST 请求。

【讨论】:

    【解决方案2】:

    在您发出 POST 请求后,浏览器会将该信息保存在内存中,以防您刷新页面后再次发送该信息。在您的情况下,您来自 POST 请求,因此浏览器会询问您是否要再次发送 POST 数据,而您无法避免这种情况。

    为避免这种情况,您可以将表单的操作添加到不同的页面并处理那里的所有数据。

    或者您可以在同一页面上处理数据,在处理完所有数据后,您可以重定向到新页面。

    希望这会有所帮助..

    【讨论】:

      【解决方案3】:

      我认为这可以回答这两个问题:

      http://en.wikipedia.org/wiki/Post/Redirect/Get

      【讨论】:

        猜你喜欢
        • 2013-11-23
        • 2021-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-15
        • 2021-04-05
        • 2012-12-02
        • 1970-01-01
        相关资源
        最近更新 更多