这几天用白鹭引擎做游戏开发的时候用到了白鹭自带的HTTP请求API发现在请求自己的阿里云服务器的时候,API始终返回IOError错误,网上找了很多资料,也没有一个正面的回答.最后自己一遍遍尝试,终于发现.原来是服务器跨域的问题.
例如使用:
var request = new egret.HttpRequest(); request.responseType = egret.HttpResponseType.TEXT;
request.open(“http://huangyi.cc”,egret.HttpMethod.GET);
request.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);
request.send();
request.addEventListener(egret.Event.COMPLETE,this.onGetComplete,this);
request.addEventListener(egret.IOErrorEvent.IO_ERROR,this.onGetIOError,this);
request.addEventListener(egret.ProgressEvent.PROGRESS,this.onGetProgress,this);
使用上面的代码进行http访问http://huangyi.cc域名,假如此域名的服务器没有允许跨域访问,则白鹭的API会返回IO_ERROR错误也就是会执行this.onGetIOError函数.
这个时候就要修改服务器的配置比如在nginx服务器上:
Linux下找到nginx的配置文件然后用VI编辑器编辑它.
vi /etc/nginx/nginx.conf
加入如下代码
http {
###start####
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
###end ###
}
:wq!保存
service nginx restart 重启nginx即可。
在apache服务器上如下配置:
1.首先找到 httpd.conf 文件
找到 #LoadModule headers_module modules/mod_headers.so
把#注释符去掉(也有可能已经默认去掉了)
目的是开启apache头信息自定义模块
2.找到你的虚拟主机文件 注意是被跨域的网站的 具体内容是这样的文件
<Directory "E:/laragon/www/(你的本地地址)">
AllowOverride All
Require all granted
</Directory>
然后在这段内容里面加上如下:
对所有域名开放
Header set Access-Control-Allow-Origin * (这样加上一行)
对指定域名开放
Header set Access-Control-Allow-Origin http://www.***.com (或者这样加上一行)