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包。不知道有沒有大神,能給我提供一個更好的方法。