Frage Access-Control-Allow-Origin Mehrere Ursprungsdomänen?


Gibt es eine Möglichkeit, mehrere Cross-Domänen mit dem zu ermöglichen Access-Control-Allow-Origin Header?

Ich bin mir der bewusst *aber es ist zu offen. Ich möchte wirklich nur ein paar Domains zulassen.

Als ein Beispiel, etwa so:

Access-Control-Allow-Origin: http://domain1.example, http://domain2.example

Ich habe den obigen Code versucht, aber es scheint nicht in Firefox zu funktionieren.

Ist es möglich, mehrere Domains anzugeben, oder stehe ich nur bei einem?


837
2017-10-31 03:27


Ursprung


Antworten:


Die empfohlene Vorgehensweise ist, dass Ihr Server den Origin-Header vom Client liest, diesen mit der Liste der Domänen vergleicht, die Sie zulassen möchten, und wenn es übereinstimmt, den Wert des Origin Kopfzeile zurück zum Client als die Access-Control-Allow-Origin Header in der Antwort.

Mit .htaccess Du kannst es so machen:

# ----------------------------------------------------------------------
# Allow loading of external fonts
# ----------------------------------------------------------------------
<FilesMatch "\.(ttf|otf|eot|woff)$">
    <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
    </IfModule>
</FilesMatch>

724
2017-12-05 00:10



Eine andere Lösung, die ich in PHP verwende:

$http_origin = $_SERVER['HTTP_ORIGIN'];

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

165
2017-09-17 10:49



Das hat für mich funktioniert:

SetEnvIf Origin "^http(s)?://(.+\.)?(domain\.example|domain2\.example)$" origin_is=$0 
Header always set Access-Control-Allow-Origin %{origin_is}e env=origin_is

Beim Einlegen .htaccessEs wird sicher funktionieren.


98
2018-06-18 06:31



Ich hatte das gleiche Problem mit Woff-Fonts, mehrere Subdomains hatten Zugriff. Um Subdomains zuzulassen, habe ich etwas zu meiner httpd.conf hinzugefügt:

SetEnvIf Origin "^(.*\.example\.com)$" ORIGIN_SUB_DOMAIN=$1
<FilesMatch "\.woff$">
    Header set Access-Control-Allow-Origin "%{ORIGIN_SUB_DOMAIN}e" env=ORIGIN_SUB_DOMAIN
</FilesMatch>

Für mehrere Domains könnten Sie einfach die Regex ändern SetEnvIf.


84
2018-05-18 12:46



So können Sie den Origin-Header zurücksenden, wenn er mit Nginx Ihrer Domain entspricht: Dies ist nützlich, wenn Sie eine Schriftart für mehrere Subdomains bereitstellen möchten:

location /fonts {
    # this will echo back the origin header
    if ($http_origin ~ "example.org$") {
        add_header "Access-Control-Allow-Origin" $http_origin;
    }
}

55
2017-09-13 20:25



Hier ist, was ich für eine PHP-Anwendung getan habe, die von AJAX angefordert wird

$request_headers        = apache_request_headers();
$http_origin            = $request_headers['Origin'];
$allowed_http_origins   = array(
                            "http://myDumbDomain.example"   ,
                            "http://anotherDumbDomain.example"  ,
                            "http://localhost"  ,
                          );
if (in_array($http_origin, $allowed_http_origins)){  
    @header("Access-Control-Allow-Origin: " . $http_origin);
}

Wenn der anfordernde Ursprung von meinem Server zugelassen wird, geben Sie den $http_origin selbst als Wert der Access-Control-Allow-Origin Header anstelle von a zurückgeben * Platzhalter


22
2017-12-25 21:48



Es gibt einen Nachteil, den Sie beachten sollten: Sobald Sie Dateien an ein CDN (oder einen anderen Server, der kein Scripting erlaubt) out-sourcen oder wenn Ihre Dateien auf einem Proxy zwischengespeichert werden, ändern Sie die Antwort basierend auf 'Origin' Anforderungsheader wird nicht funktionieren.


18
2018-02-20 19:18



Für mehrere Domains in Ihrem .htaccess:

<IfModule mod_headers.c>
    SetEnvIf Origin "http(s)?://(www\.)?(domain1.example|domain2.example)$" AccessControlAllowOrigin=$0$1
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    Header set Access-Control-Allow-Credentials true
</IfModule>

16
2018-03-11 16:51