以前没做过Unity web版本,第一次做,在编辑器下调试得好好的,前后端登录对接都没问题,理所当然的以为发布出来就万事大吉。谁知道发布出来才是噩梦的开始。好家伙,直接登录不了。看输出日志居然是unknown error,这下可把我整懵了。后来通过查看网页版的运行日志才知道是浏览器跨域不能访问的问题。(按F12可以直接查看网页的运行日志,我当时也不懂,折腾了我好一阵)。

 

跨域按我粗浅的理解就是客户端和服务端协议,域名,端口不一致导致的。想详细了解的可以查看下面的链接。

跨域问题产生的原因

跨域问题最好的办法是在服务端解决,但如果是基于某些特殊原因,我们没办法在服务端解决,是不是就意味着这个问题不能解决了。当然不是。还记得上面我们说的产生跨域的原因吗,跨域产生是因为协议,域名,端口不一致产生的,假如我们可以让协议,域名,端口一致,那跨域的问题不就迎刃而解了吗?有人说,你这不是废话吗,协议,域名,端口都一样的话,我还需要来看你写的这篇垃圾。稍安勿操,试想一下,假如我们在本地部署一个代理服务器,通过代理服务器去访问我们真正需要访问的服务端。我们与真正服务端之间的通讯都经过这个代理服务器。因为代理服务器是在我们本地部署的,自然不存在跨域的问题。至于代理服务器和服务端直接的跨域问题,我们没办法直接去修改真正的服务端,但是我们可以修改自己部署的代理服务器的配置啊,我们给它加上允许跨域访问的协议,这样问题不就解决了吗。当然,理论再好,还得看实践。

首先下载一个nginx服务器,别问为啥选它,问就是刚好搜到它。详细的下载及部署可以参考以下的链接。

nginx的下载及安装部署

部署完成后最关键的来了,在你解压好的nginx路径下打开conf文件夹,找到下面的nginx.conf配置文件,按照下面的设置更改配置,修改完之后在cmd控制台执 nginx -s reload方法即可

 

   location / {
        #实际需要访问的服务端,这里需要替换成你想要访问的服务端
            proxy_set_header Host www.ilab-x.com;
            proxy_pass http://www.ilab-x.com/;
            
            #root   html;
            #index  index.html index.htm;
            #allow all;
            
            charset utf-8;   #显示中文
            #设置代理服务器允许所有的跨域访问
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
            
            #加上这一句防止post方法还是出现跨域的问题,刚开始就是因为少了这个,折腾了好久
            if ($request_method = 'OPTIONS') {
                 return 204;
            }

        }

点击查看更详细的参数配置及解释。

 nginx配置代理服务器

后续填坑,配置好之后发现可以使用只能使用localhost访问,无法通过IP访问。后续查找了好久才知道不管是阿里云,腾讯云各种都需要登录服务器控制器设置端口映射出去,具体怎么设置大家可以参考下面的链接,已经说得很详细。

阿里云服务器nginx公网IP无法访问浏览器

当然这些服务器默认是开通了nginx的80端口的,但是谁叫我手贱呢,自己把端口改了,然后就杯了个具,前端客串后端就是这么悲催,什么都不懂,一点问题都找了半天。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐