1381 Stimmen

Access-Control-Allow-Origin Multiple Origin Domains?

Gibt es eine Möglichkeit, mehrere Cross-Domains zuzulassen, indem man die Access-Control-Allow-Origin Kopfzeile?

Ich bin mir bewusst, dass die * aber sie ist zu offen. Ich möchte wirklich nur ein paar Domänen zulassen.

Ein Beispiel dafür ist Folgendes:

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

Ich habe den obigen Code ausprobiert, aber er scheint in Firefox nicht zu funktionieren.

Ist es möglich, mehrere Domänen anzugeben, oder muss ich mich auf eine beschränken?

1062voto

yesthatguy Punkte 10034

Die empfohlene Vorgehensweise scheint zu sein, dass Ihr Server den Origin-Header vom Client liest, diesen mit der Liste der Domains vergleicht, die Sie zulassen möchten, und bei Übereinstimmung den Wert der Origin Header zurück an den Client als die Access-Control-Allow-Origin Header in der Antwort.

Mit .htaccess können Sie das so machen:

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

287voto

Nikolay Ivanov Punkte 4841

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

134voto

Jay Dave Punkte 1703

Das hat bei mir 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 Einsetzen .htaccess wird es mit Sicherheit funktionieren.

97voto

Staugaard Punkte 1067

Ich hatte das gleiche Problem mit woff-fonts, mehrere Subdomains mussten Zugriff haben. Um Subdomains zuzulassen, fügte ich meiner httpd.conf etwas wie folgt hinzu

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 Domänen können Sie einfach die Regex in SetEnvIf .

78voto

mjallday Punkte 9394

Hier erfahren Sie, wie Sie den Origin-Header zurückgeben können, wenn er mit Ihrer Domain mit Nginx übereinstimmt. 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;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X