1.一般的跨域get和post可以通过设置nginx来解决。在nginx.conf的http中添加如下代码add_headerAccess-Control-Allow-Origin*;add_headerAccess-Control-Allow-HeadersX-Requested-With,Content-Type,x_requested_with;add_headerAccess-Control-Allow-Methods头部、获取、发布、选项;2.以上nginx跨域配置的情况。最近遇到一个问题,就是yii2restfulrequestswithtoken,认证失败返回401,axios获取不到。找了半天,发现是服务器端的问题。具体原理不是很清楚,大致意思就是客户端请求有几级,认证码比较高,没有用到nginx的跨域。所以,虽然接口正确返回了401,但是axios由于跨域的限制,无法获取到这个值。这就需要在yii2中进行深度跨域设置。3.首先想到的是在parentcontroller的behaviors中添加cors设置。这是yii2自带的配置。但是发现客户端报错,意思是不能有两个相同的跨域域名。正因为如此,yii2的跨域设置与nginx的跨域设置冲突。4、找了半天终于找到了一个不完美的解决方案,就是在yii/filters/auth/AuthMethod.php中加入跨域设置。因为实在是找不到别的地方了,所以可以设置一个自定义的header,在authenticator失效之前跨域。5.当然,我觉得这个方法很烂。因为yii2开发的原则是尽量不去碰vendor包。不知道有没有高手能给我提供更好的方法。
