【发布时间】:2019-06-06 13:14:43
【问题描述】:
我有一个带有 API 的 WP 站点,我正在使用其他站点调用它。我收到此错误
访问 www.wpsiteurl.com 上的 XMLHttpRequest 来源 www.theothersiteurl.com 已被 CORS 阻止 策略:对预检请求的响应未通过访问控制 检查:“Access-Control-Allow-Origin”标头包含多个 值 'www.theothersiteurl.com, *',但只允许一个。
我找到了解决方案here和here,基本上都是介绍在注册函数中加入这个:
remove_filter( 'rest_pre_serve_request', 'rest_send_cors_headers' );
add_action( 'rest_pre_serve_request', function ($value) {
$origin = get_http_origin();
header( 'Access-Control-Allow-Headers: X-Requested-With' );
header( 'Access-Control-Allow-Methods: POST, GET' );
header( 'Access-Control-Allow-Origin: *');
header( 'Access-Control-Allow-Credentials: true');
return $value;
});
对我来说这是行不通的,因为它只是返回 * 或作为原点添加的任何内容和另一个 *。更改第二个参数没有帮助,添加此操作后似乎在来源中添加了通配符。
我按照答案中的建议编辑了 .htaccess 文件。这适用于我正在测试解决方案的其他环境。但是,在其他服务器上却没有 - 源被添加到源字符串中,就像它是与 php 一起添加的一样。
在我看来,似乎有些东西阻止了完全覆盖 access-control-allow-origin 并强制添加它。
我的问题是:
- 什么原因导致服务器不允许设置一个 Access-Control-Allow-Origin?
- 如何“覆盖”或清除 Access-Control-Allow-Origin?
【问题讨论】:
-
stackoverflow.com/questions/1653308/…你可以试试这个链接。
-
这可能会有所帮助 => crunchify.com/…
-
您和源站之间是否有 CDN 或代理服务器?另外,您是否阻止了OPTIONS?你需要它和 GET。
-
@adamrights 阻止选项?你能再解释一下吗?