我不明白为什么会收到此错误。
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-router)获取时发生错误。
两个域都在宅基地。我已经设置了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';
}
我希望比我聪明的人可以帮助我解决这个问题。提前谢谢!
答案 0 :(得分:1)
您希望允许主域和的子域请求。 CORS specification不允许在单个标头中。无论是确切的域名还是' *'。您必须动态检查域并在标头中设置 。
使用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
检查$_SERVER['HTTP_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']);
}
答案 1 :(得分:-1)
您希望通过此页面顶部的ajax获取结果的页面添加以下内容:
<script>
Shadowbox.init();
$(document).ready(function() {
$("a#inline").fancybox({
'hideOnContentClick': false,
'overlayOpacity': 0.85}).click();
});
</script>
它将解决您的问题。