以前没做过Unity web版本,第一次做,在编辑器下调试得好好的,前后端登录对接都没问题,理所当然的以为发布出来就万事大吉。谁知道发布出来才是噩梦的开始。好家伙,直接登录不了。看输出日志居然是unknown error,这下可把我整懵了。后来通过查看网页版的运行日志才知道是浏览器跨域不能访问的问题。(按F12可以直接查看网页的运行日志,我当时也不懂,折腾了我好一阵)。
跨域按我粗浅的理解就是客户端和服务端协议,域名,端口不一致导致的。想详细了解的可以查看下面的链接。
跨域问题最好的办法是在服务端解决,但如果是基于某些特殊原因,我们没办法在服务端解决,是不是就意味着这个问题不能解决了。当然不是。还记得上面我们说的产生跨域的原因吗,跨域产生是因为协议,域名,端口不一致产生的,假如我们可以让协议,域名,端口一致,那跨域的问题不就迎刃而解了吗?有人说,你这不是废话吗,协议,域名,端口都一样的话,我还需要来看你写的这篇垃圾。稍安勿操,试想一下,假如我们在本地部署一个代理服务器,通过代理服务器去访问我们真正需要访问的服务端。我们与真正服务端之间的通讯都经过这个代理服务器。因为代理服务器是在我们本地部署的,自然不存在跨域的问题。至于代理服务器和服务端直接的跨域问题,我们没办法直接去修改真正的服务端,但是我们可以修改自己部署的代理服务器的配置啊,我们给它加上允许跨域访问的协议,这样问题不就解决了吗。当然,理论再好,还得看实践。
首先下载一个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;
}
}
更详细的参数解释可以查看下面的链接。