Yii2.0 前後端分離 前端ajax呼叫跨域的問題
阿新 • • 發佈:2018-12-09
Yii2.0有自己的一套防止跨域呼叫的機制,網上一搜一大把的解決方式,無非就是:
use yii\filters\Cors;
public function behaviors() { return ArrayHelper::merge([ [ 'class' => Cors::className(), 'cors' => [ 'Origin' => ['http://www.myserver.net'], 'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'], ], ], ], parent::behaviors()); }
其中,把Origin改成 'Origin'=>['*'] 就可以了,但事實證明,還是不行的。
或者改nginx伺服器的配置,增加:
location / { add_header Access-Control-Allow-Origin *; }
這樣也還是不行的~
那為啥利用Postman或者直接網頁請求都可以,但是在html使用ajax請求遠端介面是不行的,大概原因是因為ajax的http請求型別區別於以上的請求,ajax的http請求會多一個屬性:“X-Requested-With”,瀏覽器和程式會區分到帶著個屬性的就是遠端的ajax請求,然後加以攔截(ajax會返回其建立的XMLHttpRequest物件)。
言歸正傳,要解決Yii2.0前端ajax跨域請求問題其實也很簡單,在專案的入口檔案index.php或者在config的main.php加上以下幾句話即可;
header("Access-Control-Allow-Origin: *"); header('Access-Control-Allow-Headers:Authorization'); header("Access-Control-Allow-Methods: GET, POST, DELETE"); header("Access-Control-Allow-Credentials: true"); header("Access-Control-Allow-Headers: Content-Type, X-Requested-With
親測可用;
以上是我的分享,如有不到位敬請諒解!