设置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

发表评论: