后台使用PHP編寫簡單的接口
網上有很多關於如何配置header來解決跨域請求的問題,如下所示:
1 // 指定允許其他域名訪問 2 header('Access-Control-Allow-Origin:http://127.0.0.1:8282'); 3 // 響應類型 4 header("Access-Control-Allow-Methods:HEAD,POST,GET,PUT,DELETE,OPTIONS"); 5 header("Access-Control-Max-Age:60"); 6 header('Access-Control-Allow-Credentials: true'); 7 // 響應頭設置 8 header('Access-Control-Allow-Headers:x-requested-with,content-type'); 9 10 $res = array("name" => "Echo","age" => 26); 11 12 echo json_encode($res); 13 return json_encode($res); 14
關於代碼中配置的header,我曾嘗試很多次仍沒有辦法成功,現在針對自己的經驗講解注意問題:
-
Access-Control-Allow-Origin:http://127.0.0.1:8282或者
Access-Control-Allow-Origin:* 兩者配置都可以,但是要注意的是
http://127.0.0.1:8282以及*都不需要帶上單引號或者雙引號!
-
Access-Control-Allow-Credentials: true 如若配置該項,則在前端請求代碼中的頭部信息中同樣也要配置
//跨域時,cookie添加到請求中
$httpProvider.defaults.withCredentials = true; - 在以上配置好后如果遇到預檢OPTIONS請求,則不妨試試
Access-Control-Allow-Headers:x-requested-with,content-type 在options預檢后,瀏覽器會自動重新發送正常的請求,像這樣:
前端代碼中在配置url時
url="http://127.0.0.1/study/phpServer/test.php";
一定不要忘記加上http://
如果url=127.0.0.1/study/phpServer/test.php
不然請求地址會在前面加上當前瀏覽地址:
http://127.0.0.1:8282/127.0.0.1/study/phpServer/test.php
從而請求不到數據
另外據網上信息提示,如果要在
Access-Control-Allow-Origin處理多個域的話,如下設置
$sorigin = array( 'domain1', 'domain2' ); if(in_array($origin, $origins)){ header('Access-Control-Allow-Origin:'.$origin); header('Access-Control-Allow-Methods:POST'); header('Access-Control-Allow-Headers:x-requested-with,content-type'); }
但是暫時還沒有試驗~