ajax 的跨域访问是前后端分离的重要问题,如果没有访问权限则被会拦截。网络上常用的方法是JSONP方法,JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式的安全。
以前在做PHP的前后分离的平台,但因跨域访问权限问题一直不能很好的实现。但今天在做一个项目时,因为工期紧,所以再次想到了前后端分离,于是再次想到今年年初的一次在做平台前后分离时应用过网络上搜索的通过设置Access-Control-Allow-Origin来实现,但网上写 Access-Control-Allow-Origin 是 Access-Control-Allow-Origin:* 是允许所有域名,想到如果是这样的话,这权限也太大了安全性大大降低,想着能否允许我信任的域名来访问,其他的域名则不允许,今天终于找到了资料,现在整理如下。
在被请求的Response header中加入
// 指定允许其他域名访问 header('Access-Control-Allow-Origin:*'); // 响应类型 header('Access-Control-Allow-Methods:POST'); // 响应头设置 header('Access-Control-Allow-Headers:x-requested-with,content-type');
这是种简单的实现ajax POST跨域访问的方法。但这样写开放的访问权限过大,所以需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow-Origin:允许的域名
例如:header(‘Access-Control-Allow-Origin:http://blog.pkcms.cn’);
如果需要设置多个域名允许访问,这里需要用php处理一下
例如允许 blog.pkcms.cn 与 blog.pkcms.cn 可以跨域访问
$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : ''; $allow_origin = array( 'http://blog.pkcms.cn', 'http://blog.pkcms.cn' ); if(in_array($origin, $allow_origin)){ header('Access-Control-Allow-Origin:'.$origin); header('Access-Control-Allow-Methods:POST'); header('Access-Control-Allow-Headers:x-requested-with,content-type'); }