今天碰到一个跨域请求的问题。a.domain.com 域名下需要请求b.domain.com下的接口。

不做任何处理,正常情况下回报以下错误:

cros

解决方案

浏览器端需要对发起的请求做跨域处理。设置xhr的属性withCredentials = true

1
2
3
4
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/', true);
xhr.withCredentials = true;
xhr.send(null);

Nginx也需要做对应的Access-Control-Allow-Origin设置。

1
2
3
4
5
6
if ($http_origin ~* ^https://[a-z\\d]+\.domain\.com$){
add_header 'Access-Control-Allow-Origin' '$http_origin';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Cookie,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}

只要是*.domain.com的域名都可以正常访问。

这样,就可以满足了。