其实跨域这个问题就是浏览器的一种保护机制,当你设置请求头以后可以跳过这种机制。所以服务端与服务端访问是不存在跨域的,例如 NGINX 访问 接口服务器。
跨域分两种:简单跨域,复杂跨域。
简单跨域:一次请求。配置#跨域设置即可
复杂跨域:两次请求,首先请求确定头信息是否允许,请求方式OPTIONS,我们要做的就是捕获第一次OPTIONS请求返回200code状态码,浏览器会发送第二次数据访问请求。
为什么会产生两种跨域情况?
复杂跨域:这里我配置复杂跨域是由于服务端需要自定义传入Headers,token。
具体简单和复杂跨域的产生可自行搜索。
所以我就采用nginx 配置跨域访问
location /v2/ {
#解决自定义header,复杂跨域请求
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Max-Age 1728000;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
add_header Access-Control-Allow-Headers 'token';
add_header Content-Type 'application/json; charset=utf-8';
add_header Content-Length 0 ;
return 200;
}
#跨域设置
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,token';
#代理访问地址
proxy_pass http://localhost:8031/;
}
以上配置用于开发阶段方便,部署服务请需自行斟酌。