gpt4 book ai didi

php - 什么可以防止覆盖服务器中的 Access-Control-Allow-Origin?

转载 作者:可可西里 更新时间:2023-10-31 22:50:21 25 4
gpt4 key购买 nike

我有一个带有 API 的 WP 站点,我正在用其他站点调用它。我得到这个错误

Access to XMLHttpRequest at www.wpsiteurl.com from origin www.theothersiteurl.com has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values 'www.theothersiteurl.com, *', but only one is allowed.

我找到了解决方案 herehere ,基本上介绍了将其添加到注册函数中:

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?

最佳答案

有不止一种方法可以通过多个主机实现这一点。一种是使用 .htaccess,另一种是使用 php。

使用 .htaccess:

<IfModule mod_headers.c>
SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.example|dev02.otherdomain.example)$" AccessControlAllowOrigin=$0
Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header merge Vary Origin
</IfModule>

使用 PHP:

$origin = $_SERVER['HTTP_ORIGIN'];

if ($origin == "http://www.domain1.com"
|| $origin == "http://www.domain2.com"
|| $origin == "http://www.domain3.com") {
header("Access-Control-Allow-Origin: $origin");
}

关于php - 什么可以防止覆盖服务器中的 Access-Control-Allow-Origin?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54149505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com