这两天,项目上遇到了如何解决跨域问题.对于跨域.百度了一下也是很快解决.出于对跨域的不了解,也是通过查资料了解了一下.现在做个总结.
首先,需要明白什么是跨域?
跨域
跨域是因为浏览器的同源策略引起的,说白了就是指从一个域的网页去请求另一个域的资源.比方说从你家去我家拿个东西.你肯定不让啊.那么什么是同源策略?
同源
URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。相反,只要协议,域名,端口有任何一个的不同,就被当作是跨域。
同源策略
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。(来自百度百科)
浏览器采用同源策略,禁止页面加载或执行与自身来源不同的域的任何脚本。
因为跨域.我们更加安全的上网. ? 但往往凡事有利有弊.所以,才有了本文.
本文通过设置Access-Control-Allow-Origin来实现跨域。
指定某域名(http://shiniaan1997.cn)跨域访问,则只需在需要访问的文件头部添加如下代码:
header('Access-Control-Allow-Origin:http://shiniaan1997.cn');
指定多个域名跨域访问,则只需在访问的文件头部添加如下代码:
$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';
$allow_origin = array(
'http://shiniaan1997.cn',
http://test.shiniaan1997.cn
);
if(in_array($origin, $allow_origin)){
header('Access-Control-Allow-Origin:'.$origin);
}
允许所有域名访问则只需在访问的文件头部添加如下代码:
header('Access-Control-Allow-Origin:*');
// // 响应类型
header('Access-Control-Allow-Methods:*');
// 响应头设置
header('Access-Control-Allow-Headers:x-requested-with,content-type');