跨域请求 Access-Control-Allow-Origin


Ajax 跨域 指定的域名很简单
有二个域名 domain1.com 和 domain2.com
PHP 和 Nginx 二种方法
PHP方法

$http_origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
if (preg_match('/domain1.com|domain2.com$/i', $http_origin)) {
    header('Access-Control-Allow-Origin: ' . $http_origin);
}


Nginx方法
location / {
    if ($http_origin ~ 'domain1.com|domain2.com$') {
        add_header Access-Control-Allow-Origin $http_origin;
    }
}

只要匹配到以 domain1.com 或 domain2.com 结尾的域名
就返回 Access-Control-Allow-Origin 头信息,表示通过

其他模式:
放行所有域名
PHP方法
header('Access-Control-Allow-Origin: *');

Nginx方法

add_header Access-Control-Allow-Origin *;

放行单个域名

PHP方法
header('Access-Control-Allow-Origin: http://domain1.com');


Nginx方法
add_header Access-Control-Allow-Origin http://domain1.com;



使用正则匹配的好处是可以不用区分 http 和 https。上面的例子中,均使用 http://,如果放行 https:// 就要多加上一行代码了。为了代码简洁,使用正则吧。



阮一峰大神的文章 跨域资源共享 CORS 详解
//www.ruanyifeng.com/blog/2016/04/cors.html

什么是 HTTP访问控制(CORS)
//developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS