阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      不同国家访问同一网站,从不同的服务器获取不同资源

      场景说明

      这种情况还是有点蛋疼的,需要是不同地区访问同一个网站,这时候根据访问者的实际情况,去加载对应的资源(不同地区需要用的资源还不一样);

      下面是两种常见的场景和解决方案

      不同国家访问一个网站,加载相同资源

      如果是不同国家,访问同一网站,想用相同的资源,那么可以使用阿里云的 CDN 服务来解决,地区选择全球加速,亲测效果还是很不错的!

      使用这种方案,需要了解下 阿里云的CDN更新和预热机制,可以参考我的另一篇博文:阿里云 CDN 静态文件不回源更新的解决方法 这事我在这种情况的解决思路

      不同国家访问域名,展现不同的网站

      这种方案也好做,可以通过用户的语言环境来自动跳转到不同的网站;

      比如我在搞一个网站:https://www.gopekka.com/

      这个就是这种场景的,具体解决办法,可以参考我的博文:前端 JS 获取用户浏览器默认语言设置,自动判断跳转不同网站

      当前场景的解决思路

      这个类似前面两种的结合,适应中小型的网站,如果很大了,或者业务比较复杂,就不能这么干了,否则维护起来太蛋疼了 !

      方法一:通过判断用户语言来解决

      var language = localStorage.getItem('locale') || window.navigator.language.toLowerCase() || 'en';
      var baseUrlVal = ''
      localStorage.setItem('locale', language)
      if (language.indexOf("zh-cn") !== -1) {
          baseUrlVal = 'https://xxxxx-public.oss-cn-hangzhou.aliyuncs.com/xxxx'
      } else if (language.indexOf('en') !== -1) {
          baseUrlVal = 'https://xxxxx-public-gg.oss-us-west-1.aliyuncs.com/xxxx'
      } else {
          baseUrlVal = 'https://xxxxx-public-hk.oss-cn-hongkong.aliyuncs.com/xxxx'
      }
      

      根据用户环境判断,会导致一个情况:中国大陆内的用户,设置英文为首选语言,那么访问网站会被移到对应的英文网站,这样的处理也是合理的,毕竟用户确实是想阅读英文网站的;

      方法二:通过判断用户

      可以通过获取用户的 IP,然后把 IP 放到 IP 库里查询所在地,从而加载对应的资源,这样的方案回更加准确!有的第三方会直接返回所在国家的编码,比如 cn / en 等就更好了

      但是这样的方案也有一个弊端:如果用户通过科学上网,全局模式下,会被认为属于美国 / 日本等等(看梯子的 IP 而定了),那么会导致访问非常慢;但是这种偏差,很多翻墙的人都是了解的,没人会故意用美国的 IP 访问国内的淘宝 / 百度等网站的,除非是忘记切换回来了;

      IP 判断

      市场上有很多 IP 判断的,拿 IP 倒是非常好做的一件事;比如我现在可以拿到用户访问本网站时候的 IP;

      如下:

      目录
      目录