跨域:指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對javascript施加的安全限制。
同源策略:同源策略/SOP(Same origin policy)是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,瀏覽器很容易受到XSS、CSFR等攻擊。所謂同源是指"協議+域名+端口"三者相同,即便兩個不同的域名指向同一個ip地址,也非同源。
常見跨域方法
1、允許單個域名訪問
指定某域名(http://client.runoob.com)跨域訪問,則只需添加如下代碼:
public function test(){ //單個跨域 header('Access-Control-Allow-Origin:http://www.runoob.com'); return json(["code"=>1,"name"=>"lhs"]); }
2、允許多個域名訪問
指定多個域名(http://client1.runoob.com、http://client2.runoob.com等)跨域訪問,則只需添加如下代碼:
$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array( 'http://client1.runoob.com', 'http://client2.runoob.com' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); }
3、允許所有域名訪問
允許所有域名訪問則添加如下代碼:
header('Access-Control-Allow-Origin:*');
4、使用JSONP跨域
使用JSONP跨域則添加如下代碼:
public function test(){ return jsonp(["code"=>1,"name"=>"lhs"]); }
使用ajax獲取數據如下代碼:
$.ajax({ type:"get", url:"http://tp51hr.com/api/index/test", dataType : "JSONP",//必須 success:function(res){ console.log(res) } });