在浏览器栏中输入地址并确定,后台controller中收到2次请求,有人了解吗?

开发环境:mac,idea,chrome

在调试controller时,我在地址栏打入地址发起请求,后台一共收到了2次请求。

如果第一次请求马上执行完的话,就不会请求第二次,如果第一次请求处理的比较慢,就回再发起一次。

image.png

评论区

l745230

2020-03-19 08:40

浏览器自动重发了吧. 之前用qq浏览器的时候也曾出现过.然后卸载重装,又诡异的正常了. 感觉有点类似微信公众号的机制. 请求没收到返回,重试3次.

jianghe727

2020-03-19 14:13

@l745230 我使用postmen发请求,后台也接收到2次。我把controller中的处理内容去掉,让请求能快速响应,这种情况下后台只收到一次请求。

Didier

2020-03-19 14:35

最近我也遇到类似的问题,但是我不确定是什么原因。就是用户在填完表格内容后进行提交,我发现有些数据是重复的。我以为是用户用户重复提交了,后来限制了重复提交发现还是有这样的问题。也不清楚是啥原因~

JFinal

2020-03-19 16:56

历史上有很多人碰到过这种问题

最后的本质原因找到了,只有一个: 确实是因为发送了两次请求

具体到不同的人,发两次请求的方式不同,我举一个最罕见的例子:
在五六年前有一位同学是因为 html 中的 img 标签中的 src="", 而这个 src 为空字符串的值居然在 IE 浏览器中会自动发送一次请求,外加用户手动请求的一次,一共两次

不同的人可能会用不同的方式触发了两次请求,但有一点可以肯定:绝对不要在 jfinal 上找原因,jfinal 绝对不可能自发请求两次

解决问题的具体办法是:
1:在后台代码找原因:在被请求的地方设置断点,查看请求调用栈
2:在前端代码找原因:打开浏览器的开发者工具,进入 network 栏,查看发送请求的次数

JFinal

2020-03-19 17:42

常见的具体原因有:
1:在调用完一个 action 以后又调用了 forwardAction (...) 再次请求某个 action
2:拦截器内改变调用流程
3:tomcat 与 undertow 自做主张做了 302 重定向:
https://www.oschina.net/question/816381_108867
https://www.oschina.net/question/941098_93842

zzutligang

2020-03-19 22:24

支持@JFinal,这种情况绝对是发送了两次请求,具体怎么触发了发两次请求,可能会很诡异,但觉绝对不是JFinal和undertow的事。

jianghe727

2020-03-20 14:37

@JFinal 你好还是有问题,我把我这边的详细情况记录了下来,请大佬看一下,可能出问题的地方在哪里?http://note.youdao.com/noteshare?id=8c90831a7b71c07f438ba3b1ecfd7254

热门反馈

扫码入社