以node koa为例
app.use(function *(){
let {method, url, header} = this.request;
this.set('Access-Control-Allow-Origin', '*');
if (method.toLowerCase() === 'options') {
this.set('Access-Control-Allow-Credentials', 'true');
this.set('Access-Control-Allow-Methods', 'POST,GET,OPTIONS,PUT,DELETE');
this.set('Access-Control-Allow-Headers', 'cache-control,content-type,hash-referer,x-requested-with');
this.body = '';
return false;
}
// 下面是正常逻辑.....
});
app.listen(9870);
this.set('Access-Control-Allow-Headers', 'cache-control,content-type,hash-referer,x-requested-with'); //注意值是小写 !!!!!
这里判断method是因为浏览器第一次会发起一个options来检查服务器是否支持跨域访问,如下图
浏览器先去判断服务器是否返回了指定的值(上面设置的那些),如果是支持的,才会去发起真正的请求,如下图
以上这个GET才是我真正发起的请求
虽然也可以不去判断是否是options请求,但这样的话会返回不必要的数据