最近项目中一直会出现一个比较奇怪的现象:偶尔有用户会重复触发某个接口,但是埋点记录能确定在前端的代码里只发起了一次,前端也没重试的机制。从用户的UA
以及环境找不到共同点,在网上搜了下说有可能是nginx
的重试机制
https://www.cnblogs.com/caibaotimes/p/15407971.html
我们的项目都是走公司统一的结构、构建以及发布(react
)所以我想问下
1、怎么确定该项目是否走了nginx
代理?
2、如果上面的原因真是nginx
重试导致的,怎么排查?
感谢~
有可能是浏览器的重试机制,也有可能是nginx的重试机制。
排查就是就是每一层加个唯一id。
比如说前端发起的时候加个
uuid: Math.random()
,这样就可以判断是谁发起了多次。当然也得关注是不是触发了 option 预检请求,出现在跨域时
如果上述你都已经查完了,接下来就是看日志了。比如说 nginx 的 access_log 加上 grep 过滤去找。
也可以试着修改 Nginx 的重试机制。在 Nginx 配置中找到相关的配置项,可能是 proxy_next_upstream 或 proxy_retry 相关的配置。
或许这个是你想要的?
https://stackoverflow.com/questions/15155014/inconsistent-browser-retry-behaviour-for-timed-out-post-requests
更多相关的内容:https://stackoverflow.com/search?q=chrome+request+retry&s=f8018be9-1a56-4af7-9f42-7125dbc6744e&s=db4e609e-9b53-40d0-a2da-18edeb0d50cb