www.cftea.com

微信浏览器的坑-坑爹的重复请求

ITPOW2018/3/24 12:18:20

现在基于公众号的开发实际都是利用微信的接口以及微信客户端的特殊功能,但最终还是网页技术,也就是说利用微信浏览器打开网页。

但是这坑爹的微信浏览器,它会造成服务器重复请求。

  • 害处一、无端加重服务器负担。
  • 害处二、很多东西都要做防止重复提交功能,这个重复提交还不是传统的 JS 控制,而是用令牌在服务器端控制。

正常人的思维:微信浏览器 -> 服务器

微信傻叉思维:微信浏览器 -> 腾讯服务器 -> 服务器。当服务器没有及时返回,或者腾讯服务器没有及时返回时,它又采用:微信浏览器 -> 服务器,这种方式。

由于打开一个功能性网页(微信浏览器中一般都是功能性,而非宣传性网页)三五秒时间很正常,再加之微信这种傻叉思维经过了腾讯服务器中转,这个时间铁定遭延长,所以微信浏览器访问网页时,经常都是经过有两次请求

由于第一次往往服务器已经接收到了请求,已经在处理了,而微信又等不及了,迫不及待地再次发起了请求。

也就是说微信浏览器有时候会通过它的服务器中转:当中转反馈不及时时,它又扔掉重新发起一次请求;当中转比较及时时,它又不发起二次请求。

微信这种思维,我们不得不怀疑他是在监控我们提交的数据,当然他肯定会说这是为了过滤不安全的网页。

怎么避免

开始试图通过 UserAgent、腾讯服务器 IP 来过滤,发现腾讯这个中转服务器是在冒充客户的 UserAgent,而这个 IP 又不固定,看来此法无效了。

可以这样处理:每个表单中都应该有一个随机码。当服务器收到请求时,先查验随机码:如果随机码已经处理,就返回处理结果;如果随机码没有处理,就处理之,并返回处理结果。

但是,真的能完美解决吗?

坑爹的微信浏览器重复请求

如上是一个具备支付功能的系统:

第一次,微信中转服务器来请求,正常创建订单,正常与微信支付服务器对接,但是坑爹的是,后面微信中转服务器不玩了,它觉得时间太久了,它不想等了,它不会把结果返回给微信浏览器。

微信浏览器没办法,只好再次发起直接请求,我们虽然防止了订单重复创建,但是当我们再次向微信支付服务器对接时,微信支付服务器拒绝了,因为它说刚刚你不是对接过了么,不能重复对接。

坑爹啊。这个中转,不知道是哪个不合格产品经理设计的,而且都已经出来这么久了,还不解决,看来太自负。

<<返回首页<<