1.一般的跨域get和post,通过设置nginx就可以解决。在nginx.conf的http中加入以下代码即可
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With,Content-Type,x_requested_with;
add_header Access-Control-Allow-Methods HEAD,GET,POST,OPTIONS;
2.在上面的nginx跨域配置好的情况下。最近遇到一个问题,就是yii2 restful带token请求,如果鉴权失败返回401,axios获取不到。找了半天发现是服务器端的问题。具体原理也不是很清楚,大体意思就是客户端请求有几个层次,鉴权的代码比较靠前,并没有用到nginx的跨域。所以,虽然接口正确返回了401,但是axios由于跨域限制取不到这个值。这个需要在yii2中深层次跨域设置。
3.第一个想到的就是在父级controller的behaviors中加入cors设置。这个是yii2自带的一个配置。但是发现客户端报错,意思是不能有两个相同的跨域域名。因为这样yii2的跨域设置和nginx的跨域设置冲突了。
4.找了半天,最后找到一个不是很完美的解决方案,就是在yii/filters/auth/AuthMethod.php里边加入了跨域的设置。因为实在没有找到其他什么地方,可以在authenticatior失败之前设置自定义header来跨域。
5.当然,我觉得这个方法烂透了。因为yii2开发原则是尽量不要动vendor包。不知道有没有大神,能给我提供一个更好的方法。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。