问题背景:前后端分离情况下后端开发测试需要配置hosts,有此问题的人员有RD,QA,PM,User
测试环境由于用户使用这种配置导致无法使用线上系统发起单据影响用户使用,同时让用户误以为系统出问题而导致增加沟通成本。
问题原理:用户访问的是线上,但是由于本地hosts影响,浏览器加载的资源是测试环境的,导致实际发出的请求是由测试环境发出的,因此用户会以为系统出现问题。
目标:在用户使用出现问题时,给予明确提示和解决方案,减少与RD和PM的沟通成本。
方案调研:
1.后端校验hosts,
问题:java目前可以做到本地hosts检测,由于后端程序是部署到服务器上的,因此无法满足各个PC端的hosts校验。PASS
- 前端校验hosts
问题:js,node等前端语言对文件流等处理不太友好,同时难度较大,相当于重新开发了一套hosts更新工具(网上思路,无法解决根本问题,PASS)
3.C,Python实现
网上有相应的实现思路但是需要客户端安装相应脚本工具,实现难度较大(网上思路,无法根本解决问题,PASS)
4.内网单点登录实现
inpass(内网单点登录系统)目前天生支持对应域名后缀跳转,但是对于线上环境,但是发起请求却是从测试环境发起的无法判断,因此PASS
现在我们重新来看一下问题:
用户访问的是线上,由用户本地环境问题导致系统不可用,因此可以对加载的本地环境进行检测,
由于大部分获取数据接口是采用相对路径,提交单据或者弹框单据等是绝对路径,由此我们需要拿到用户访问的线上系统域名与发起单据请求的域名进行对比,
如果都是以xxxx-inc.com结尾或者以xxxtest.cn结尾的则表示用户的环境是正确的,否则是错误的.
由上所述,我们可以知道,解决方案如下:
1.前端对发起单据或者需要绝对路径匹配的ajax请求进行域名匹配,匹配成功,则正常发起,否则弹框提示或者在控制台打log,提示用户本地环境有问题...
方案优点:
1.简单,后端不用动,前端只要简单开发就可以解决问题,代码量不超过10行。
2.上述逻辑代码不需要部署到线上即可解决问题。即使部署到线上也没有问题,错误提示只在测试环境中产生,用户只要本地环境是正确的即可通过该逻辑。
3.给用户明确提示之后可减少沟通成本,让用户体验更好。
本文由博客一文多发平台 OpenWrite 发布!
架构设计@工程设计@服务稳定性之路
网友评论