添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

5 人关注

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

访问XMLHttpRequest在www.wpsiteurl.com 的访问被 CORS 阻止了。 政策。对preflight请求的响应没有通过访问控制 检查。Access-Control-Allow-Origin "头包含多个值 值'www.theothersiteurl.com, *',但只有一个是允许的。

在这里 这里 找到了解决方案,基本上都是介绍在寄存器函数中加入这个。

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?
  • 4 个评论
    stackoverflow.com/questions/1653308/.. .你可以试试这个链接。
    也许这可以帮助你=> crunchify.com/ ...
    你和源头之间是否有CDN或代理服务器?另外,你是否屏蔽了OPTIONS?你需要它和GET一起。
    @adamrights 屏蔽选项?你能再解释一下吗?
    php
    wordpress
    cors
    Jaakko Karhu
    Jaakko Karhu
    发布于 2019-01-11
    2 个回答
    Arman sheikh
    Arman sheikh
    发布于 2019-01-21
    0 人赞同

    有不止一种方法可以在多个主机上实现这一点。一种是用.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");
    
    不幸的是,这并没有解决问题,但修改.htaccess使我更接近于解决这个问题。我编辑了原来的问题,以反映我发现的情况。
    这可能意味着你的htaccess不允许在其他服务器上覆盖,在apache的httpd.conf文件中把allowOverride None改为allowOverride All,让我知道它是否有效。或者你的mod_headers已经启用。
    Adam Griffith
    Adam Griffith
    发布于 2019-01-21
    0 人赞同

    'Access-Control-Allow-Origin'头包含多个值'www.theothersiteurl.com, *',但只允许一个。

    你必须非常小心,只在一个点上设置这个头。这可以在3个地方进行。

  • 核心Apache配置
  •