gpt4 book ai didi

php - 为什么 Post/Redirect/Get 模式(PRG 模式)有效?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:25:14 29 4
gpt4 key购买 nike

我读过一些关于 PRG 模式以及它如何防止用户重新提交表单的文章。比如this post有一张不错的图:

enter image description here

我能理解为什么在收到 2xx 后用户刷新页面时不会发生表单提交。但我仍然想知道:

(1) 如果用户在重定向响应返回之前刷新页面会发生什么?那时候浏览器最新的action还是POST请求,那岂不是要重新提交?

(2) 如果用户点击“后退”会发生什么?这会导致重新提交吗?

最佳答案

(1) What happens if the user refreshes the page before the redirect response coming back? At that time, the newest action in the browser is still the POST request, wouldn't that lead to resubmission?

有2种情况:

案例 1

  1. 用户申请表
  2. 用户提交表单
  3. 服务器处理表单并发送重定向
  4. 用户决定在重定向请求到达之前取消页面

在这种情况下,用户无法刷新页面,因为刷新按钮处于取消 模式。所以用户必须先取消再刷新。所以用户取消请求并刷新页面。浏览器将发出历史记录中的最后一个 GET 请求:

1. User requests form

案例 2

  1. 用户请求表单
  2. 用户提交表单
  3. 服务器处理表单并发送重定向
  4. 浏览器接收重定向并向重定向 URL 发出 GET
  5. 当服务器正在处理请求时,用户决定取消

在这种情况下,用户无法刷新页面,必须取消请求才能刷新。所以用户取消了请求。用户然后刷新,因此浏览器将发出历史记录中的最后一个 GET 请求,即:

4. The browser receives the redirect and issues a GET to the redirect URL

这是重要的部分:POST 请求不会保留在浏览器历史记录中 如前所述here .

(2) What happens if the user click "back"? Will this lead to resubmission?

不,不会。提交只有在用户按下表单提交按钮时才会发生。

如果你没有做 PRG 模式,那么浏览器会注意到点击后退按钮时可能会发生表单提交,它会提示用户:

The page that you're looking for used information that you entered. Returning to that page might cause any action you took to be repeated. Do you want to continue?

或类似的内容,具体取决于浏览器。

关于php - 为什么 Post/Redirect/Get 模式(PRG 模式)有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43301027/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com