摘要:跨域,指的是从一个域名去请求另外一个域名的资源。即跨域名请求!跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的同源策略造成的,是浏览器施加的安全限制。
跨域,指的是从一个域名去请求另外一个域名的资源。即跨域名请求!跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的同源策略造成的,是浏览器施加的安全限制。
同源策略是由 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');