Was kann das Überschreiben von Access-Control-Allow-Origin im Server verhindern?

Lesezeit: 3 Minuten

Benutzer-Avatar
Jaakko Karhu

Ich habe eine WP-Site mit API und rufe sie mit einer anderen Site auf. Ich bekomme diesen Fehler

Der Zugriff auf XMLHttpRequest unter www.wpsiteurl.com vom Ursprung www.theothersiteurl.com wurde durch die CORS-Richtlinie blockiert: Die Antwort auf die Preflight-Anfrage besteht die Zugriffskontrollprüfung nicht: Der Header „Access-Control-Allow-Origin“ enthält mehrere Werte ‘ www.theothersiteurl.com, *’, aber nur einer ist erlaubt.

Ich habe Lösungen gefunden hier und hierdie im Grunde das Hinzufügen zur Registerfunktion einführen:

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;
});

Bei mir funktioniert das nicht, da es einfach * zurückgibt oder was auch immer als Ursprung hinzugefügt wird und ein weiteres *. Das Ändern des zweiten Arguments hilft nicht, es scheint, als ob nach dem Hinzufügen dieser Aktion ein Platzhalter zu den Ursprüngen hinzugefügt wurde.

Ich habe die .htaccess-Datei wie in den Antworten empfohlen bearbeitet. Dies funktionierte in einer anderen Umgebung, in der ich die Lösung getestet habe. Auf anderen Servern war dies jedoch nicht der Fall – der Ursprung wurde der Ursprungszeichenfolge hinzugefügt, als ob er mit der php.

Für mich scheint es etwas zu geben, das daran hindert, den Access-Control-Allow-Ursprung vollständig zu überschreiben, und erzwingt, ihn hinzuzufügen.

Meine Fragen sind:

  • Was kann dazu führen, dass der Server es nicht zulässt, einen Access-Control-Allow-Origin festzulegen?
  • Wie “überschreibe” oder lösche ich den Access-Control-Allow-Origin?

  • stackoverflow.com/questions/1653308/… Sie können diesen Link ausprobieren.

    – Chilll007

    14. Januar 2019 um 7:39 Uhr

  • Vielleicht hilft das weiter => crunchify.com/…

    – Aabir Hussain

    17. Januar 2019 um 10:12 Uhr

  • Gibt es einen CDN- oder Proxy-Server zwischen Ihnen und dem Ursprung? Blockierst du auch OPTIONEN? Sie benötigen es zusammen mit GET.

    – Adamsrechte

    19. Januar 2019 um 22:29 Uhr

  • @adamrights Sperroptionen? Können Sie etwas mehr erklären?

    – Jaakko Karhu

    21. Januar 2019 um 8:18 Uhr

Benutzer-Avatar
Arman Scheich

Es gibt mehrere Möglichkeiten, dies mit mehreren Hosts zu erreichen. Einer ist mit .htaccess und der andere mit php.

Mit .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>

Mit 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");
}

  • Leider hat dies das Problem nicht gelöst, aber das Modifizieren von .htaccess hat mich der Lösung näher gebracht. Ich habe die ursprüngliche Frage bearbeitet, um das widerzuspiegeln, was ich herausgefunden habe.

    – Jaakko Karhu

    16. Januar 2019 um 18:42 Uhr

  • Dies könnte bedeuten, dass Sie htaccess auf Ihrem anderen Server nicht überschreiben dürfen. Ändern Sie allowOverride None in allowOverride All in der Datei httpd.conf von Apache. Lassen Sie mich wissen, ob es funktioniert. Oder Ihr mod_headers ist aktiviert.

    – Arman Scheich

    17. Januar 2019 um 6:23 Uhr

Benutzer-Avatar
Adam Griffith

Der Header „Access-Control-Allow-Origin“ enthält mehrere Werte „www.theothersiteurl.com, *“, aber nur einer ist zulässig.

Sie müssen sehr darauf achten, diesen Header nur an einer Stelle zu setzen. Dies ist an 3 Stellen möglich:

  • Core-Apache-Konfiguration
  • .htaccess
  • PHP

Aus Leistungs- und Sicherheitsgründen würde ich empfehlen, dies innerhalb der Apache-Kernkonfiguration zu tun.

Wenn Sie dies jedoch mit der .htaccess-Datei erreichen möchten, stellen Sie sicher, dass sie in PHP nicht geändert wird, und stellen Sie sicher, dass AllowOverride in der zulässig ist <VirtualHost> Block.

1353640cookie-checkWas kann das Überschreiben von Access-Control-Allow-Origin im Server verhindern?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy