跨域,指的是从一个域名去请求另外一个域名的资源。即跨域名请求!跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的同源策略造成的,是浏览器施加的安全限制。
同源策略是由 Netscape 公司提出的一个著名的安全策略,所有支持 JavaScript 的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当页面在执行一个脚本时会检查访问的资源是否同源,如果非同源,那么在请求数据时,浏览器会在控制台中报一个异常,提示拒绝访问。
跨域的严格一点来说就是只要协议,域名,端口有任何一个的不同,就被当作是跨域。
比如,在实际项目中由于前后端分离当前端需要通过接口向后台发起请求,此时就会出现跨域问题,那么,这类问题需要如何解决呢?
PHP解决跨域问题的方法:
其实php解决跨域问题很简单,只需加上下面的代码就可以了:
header("Access-Control-Allow-Origin:*"); 加上这行代码表示允许所有的域名访问,不过为了安全起见,在实际项目中往往会限定只允许固定的几个域名和方法发起的请求。
1、只允许单个域名跨域请求:
header('Access-Control-Allow-Origin:http://www.xxx.com');
header('Access-Control-Allow-Methods:POST'); //表示只允许POST请求
header('Access-Control-Allow-Headers:x-requested-with, content-type'); //请求头的限制2、允许多个域名跨域请求:
$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';
$allow_origin = [
'http://www.xxx1.com',
'http://www.xxx2.com' ];
if(in_array($origin, $allow_origin)){
header('Access-Control-Allow-Origin:'.$origin);
}
header('Access-Control-Allow-Methods:POST'); //表示只允许POST请求
header('Access-Control-Allow-Headers:x-requested-with, content-type');3、不限制域名
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST');//表示只允许POST请求
header('Access-Control-Allow-Headers:x-requested-with, content-type');