来自Django官方教程的话:
“you should always return an HttpResponseRedirect after successfully dealing with POST data. This tip isn’t specific to Django; it’s just good Web development practice.”
为什么呢?
“This prevents data from being posted twice if a user hits the Back button.”
为什么会两次提交数据?
1
wy315700 2015-05-06 20:05:25 +08:00
防止刷新页面的时候重复提交
|
2
cloudzhou 2015-05-06 20:06:54 +08:00 2
当你 POST 数据之后,浏览器保留了这次 http 请求,之后在你的 F5 或者 返回 时,浏览器重新执行了这一次请求,在一些关键的行为,比如支付,重复 POST 可能导致不好的后果。
所以推荐 POST 之后做一个重定向。 这种方法其实也不能避免用户的重复点击行为,可能因为网络状况或者误操作,所以一般有如下做法: 1 点击 submit 之后失去焦点,不能再次点击,前台控制。 2 每次 POST 带有一个唯一性的 token,后台发现这个 token 已经被处理,不再执行这次请求,后台控制。 |
3
endoffight 2015-05-06 20:14:46 +08:00
其根本原因是POST方法的非幂等
|
4
vJianZhen OP @endoffight 非幂等 是什么?
|
5
vJianZhen OP @cloudzhou 说得不错!
深究进去,浏览器保留了 http 请求时,在 F5 或者 返回 时为嘛会再次执行请求?。。。 |
9
mfaner 2015-05-06 22:10:13 +08:00 1
Post-Redirect-Get
http://en.wikipedia.org/wiki/Post/Redirect/Get |
13
wurenzhidi 2018-10-08 15:19:41 +08:00
好棒!
|