背景
我们有个业务系统,过几个星期就有用户访问是白屏,不管用微信还是QQ还是其它浏览器都是白屏,然后查看日志也完全看不到请求进来,问运维是不是防火墙拦截了运维直接否认,也找不到证据,但是用户只要切换网络或者开飞行模式或者连别人的热点貌似又正常了。
推测
如果是系统异常,那么不可能切换网络开热点就可以了,切换网络连热点对应的就是ip的变化,肯定是原ip加入黑名单了。
验证
刚好有一个用户白屏,马上让他获取ip发给运维,运维发现果然是加入黑名单了看日志发现有很多这种请求
GET /9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgFBgcGBQgHBgcJCAgJDBMMDAsLDBgREg4THBgdHRsYGxofIywlHyEqIRobJjQnKi4vMTIxHiU2OjYwOiwwMTD/2wBDAQgJCQwKDBcMDBcwIBsgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDD/wgARCAD+AQQDAREAAhEBAxEB/8QAGgABAAMBAQEAAAAAAAAAAAAAAAEFBgQDAv/EABsBAQACAwEBAAAAAAAAAAAAAAAFBgECBAMH/9oADAMBAAIQAxAAAADc/F7UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
原因
代码里面有一行这样的代码
<img v-preload v-preview :origin="meal.mealImage" :src="meal.mealImage | cut(200, 200)">
v-preview点击回预览图片,但是这个不支持base64的图片会发起url请求
https://xxx.xx.xxx//9j/4AAQSkZJRgABAQ...
这一长串东西就会触发安全检擦然后ip就被加入黑名单了。
更深层次的原因
我们这个图片其实是vue项目默认的图片,只不过打包的时候图片太小了,所以就会转成base64,如果再大点就没问题。
解决办法
临时的话可以让防火墙放开如下开始的请求
https://xxx.xxx.xxx/9j/ #jpeg图片https://xxx.xxx.xxx/iVBOR #png图片
换版解决办法
把图片变大打包发版即可
小于8k会被打包成base64,改为20k左右就可以了
