同源策略
(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,Web是構建在同源策略基礎之上的,瀏覽器是針對同源策略的一種實現。
之前一直認爲,它是通過對發出的請求進行檢查是否同源,然後決定是否對該請求加以限制來實現。這次經過驗證發現正好相反:
在www.test.com下的頁面中向www.domian.com下的a.php發送ajax請求:
$.ajax({
type:"get",
url:"http://www.domain.com/a.php",
async:true,
success:function(res){
console.log(res)
},
error:function(){
console.log("error")
}
});
控制檯信息顯示跨域不被允許:
XMLHttpRequest cannot load http://www.domain.com/a.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://www.test.com' is therefore not allowed access.
查看服務器access.log記錄,找到了這條請求的記錄:
所以同源策略應該是瀏覽器在接收加載資源之前對其來源進行了檢查,然後限制加載。
關於解決辦法,有很多,最簡直接的辦法就是在相應頭裏添加Access-Control-Allow-Origin:當前域名:
<?php
header('Access-Control-Allow-Origin: http://www.test.com');
echo "666";
?>
這樣就能成功得到返回結果666:
也可以給Access-Control-Allow-Origin: 通配符 *,實際中基本不會用。