Javascript 由于http,CORS不匹配

Javascript 由于http,CORS不匹配,javascript,wordpress,nginx,server,cors,Javascript,Wordpress,Nginx,Server,Cors,我不明白为什么我会犯这个错误 sub.domain.app/:1 XMLHttpRequest cannot load http://domain.app/wc-api/v3. The 'Access-Control-Allow-Origin' header contains the invalid value 'sub.domain.app'. Origin 'http://sub.domain.app' is therefore not allowed access. 站点domain.a

我不明白为什么我会犯这个错误

sub.domain.app/:1 XMLHttpRequest cannot load http://domain.app/wc-api/v3. The 'Access-Control-Allow-Origin' header contains the invalid value 'sub.domain.app'. Origin 'http://sub.domain.app' is therefore not allowed access.
站点domain.app是wordpress安装,sub.domain只是静态html。当我试图通过ajax(vue路由器)获取数据时,会出现错误

这两个领域都在宅地上。我已经设置了nginx,允许子域执行CORS请求

location / {
    try_files $uri $uri/ /index.php?$query_string;
        add_header 'Access-Control-Allow-Origin' "http://sub.domain.app";
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}

我希望比我聪明的人能帮我解决这个问题。提前谢谢

您希望通过ajax获得结果的页面在此页面顶部添加以下内容:

<?php header('Access-Control-Allow-Origin: *'); ?>


它将解决您的问题。

看起来您希望允许主域和子域的请求。不允许在单个收割台中进行此操作。确切的域或“*”。您必须动态检查域并在标头中设置该域

使用NGINX:

 server {

    root /path/to/your/stuff;

    index index.html index.htm;

     set $cors "";

    if ($http_origin ~* (.*\.domain.com)) {
        set $cors "true";
    }

    server_name domain.com;

    location / {

        if ($cors = "true") {
            add_header 'Access-Control-Allow-Origin' "$http_origin";
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
        }


        if ($request_method = OPTIONS) {
            return 204;
        }

    }
}

使用PHP

检查
$\u服务器['HTTP\u HOST']
并在其中搜索所需的(子)域,然后使用PHP有条件地设置CORS头

比如说:

$allowed_hosts = array('sub.domain.app', 'domain.app');

if (in_array($allowed_hosts, $_SERVER['HTTP_HOST'])) {
  header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_HOST']);
}

如果您更改
http://sub.domain.app
*
add\u头
语句中?我不建议这样做,但这可能有助于找出问题所在。是的,这样就行了。:)
echo$_服务器['HTTP_HOST']的输出是什么?看起来被拒绝的请求是针对
http://domain.app/wc-api/v3
,这很有意义。是的,我只想允许那个特定的子域。它几乎可以工作了,只是标题省略了http://部分。谢谢你的回答,我会试试看,然后再给你回复!:)