小程序
小游戏
企业微信
微信支付
扫描小程序码分享
刚开发完H5支付功能, 测试的时候发现IOS上面 Safari / Chrome / QQ 浏览器正常
安卓上面, 小米 / 华为 系统浏览器正常, 但是在安卓的全部 QQ 浏览器上都会出现
这个错误页面, 全程测试使用的是同一个页面以及同一个网络环境, 没有任何切换操作.
并且前后一台设备上面的两个浏览器表现不一致, 可以反复重现.
应该不是代码的关系, 是因为 QQ 浏览器内部有一些不一致的地方吗?
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
找到具体问题了, 安卓平台上面的 QQ 浏览器似乎会使用一个代理转发请求, IP 一直是显示天津市.
然而我们的支付业务在一个负载均衡后面, 同样使用了HTTP_X_FORWARDED_FOR头来获取客户端IP.
导致最后出现的 HTTP_X_FORWARDED_FOR 里面包含了两个 IP 地址.
而由于 symfony 的 Request 组件在获取多个 clientips 时最后会调用 array_reverse 翻转数据,
导致明明是正确的第一个 IP 反而到了最后一个. 于是传给下单接口的其实是 QQ浏览器中的代理 IP, 而非实际客户机的IP.
最终导致网络环境错误.
update: 这个代理IP似乎是用于大王卡的免流功能, 并且 symfony 的逻辑其实也并没有错, 毕竟经过多次转发之后最开始的IP是可以被伪造的, 最终信任的还是与服务器通信的IP. 只不过这个和最终业务需求出现了误差..emm..
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
找到具体问题了, 安卓平台上面的 QQ 浏览器似乎会使用一个代理转发请求, IP 一直是显示天津市.
然而我们的支付业务在一个负载均衡后面, 同样使用了HTTP_X_FORWARDED_FOR头来获取客户端IP.
导致最后出现的 HTTP_X_FORWARDED_FOR 里面包含了两个 IP 地址.
而由于 symfony 的 Request 组件在获取多个 clientips 时最后会调用 array_reverse 翻转数据,
导致明明是正确的第一个 IP 反而到了最后一个. 于是传给下单接口的其实是 QQ浏览器中的代理 IP, 而非实际客户机的IP.
最终导致网络环境错误.
update: 这个代理IP似乎是用于大王卡的免流功能, 并且 symfony 的逻辑其实也并没有错, 毕竟经过多次转发之后最开始的IP是可以被伪造的, 最终信任的还是与服务器通信的IP. 只不过这个和最终业务需求出现了误差..emm..