设置Access-Control-Allow-Origin实现跨域
sanlanlan 2018-9-10 标签: js 浏览:1425 评论:0
跨域访问是一个老问题,解决方法一般有2种
1.使用jsonp,但JSONP方法是一种非官方方法,而且这种方法只支持GET方式,不如POST方式安全。
2.通过设置Access-Control-Allow-Origin来实现跨域访问
具体方式:
思路:为 Access-Control-Allow-Origin
添加目标域名 (Origin 请求头
) 而不是写死的域名或 *
实现方法:
$allowOrigin = array(
'http://www.baidu.com',
'http://www.baidu.cn',
'http://m.baidu.com',
);
$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';
//$origin = Request.Headers["origin"];
header('content-type:application:json;charset=utf8');
if(in_array($origin, $allowOrigin)){
header('Access-Control-Allow-Origin:'.$origin);
header('Access-Control-Allow-Methods:POST');
header('Access-Control-Allow-Headers:x-requested-with,content-type');
}
注意: 请求头都是可以模拟的, 所以建议将接口请求参数加密参考网易云音乐的接口加密(抓包看数据)
Access-Control-Allow-Origin:* 表示允许任何域名跨域访问
在被请求的Response header中加入,Access-Control-Allow-Origin 即可实现跨域
header('content-type:application:json;charset=utf8');
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST');
header('Access-Control-Allow-Headers:x-requested-with,content-type');
如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow-Origin:允许的域名
本文相关标签: php 跨域 Access-Control-Allow-Origin
发表评论: