1412 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?

8voto

Alex W Punkte 34972

Ich hatte Mühe, dies für eine Domäne mit HTTPS einzurichten, also dachte ich, ich würde die Lösung mit Ihnen teilen. Ich habe die folgende Direktive in meinem httpd.conf Datei:

    <FilesMatch "\.(ttf|otf|eot|woff)$">
            SetEnvIf Origin "^http(s)?://(.+\.)?example\.com$" AccessControlAllowOrigin=$0
            Header set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
    </FilesMatch>

Ändern Sie example.com zu Ihrem Domänennamen. Fügen Sie dies innerhalb <VirtualHost x.x.x.x:xx> in Ihrem httpd.conf Datei. Beachten Sie, dass, wenn Ihre VirtualHost hat ein Port-Suffix (z. B. :80 ), dann gilt diese Richtlinie nicht für HTTPS, also müssen Sie auch /etc/apache2/sites-available/default-ssl und fügen Sie die gleiche Richtlinie in dieser Datei innerhalb der Datei <VirtualHost _default_:443> Abschnitt.

Sobald die Konfigurationsdateien aktualisiert sind, müssen Sie die folgenden Befehle im Terminal ausführen:

a2enmod headers
sudo service apache2 reload

7voto

noun Punkte 3581

Wenn Sie Probleme mit Schriftarten haben, verwenden Sie:

<FilesMatch "\.(ttf|ttc|otf|eot|woff)$">
    <IfModule mod_headers>
        Header set Access-Control-Allow-Origin "*"
    </IfModule>
</FilesMatch>

3voto

QA Collective Punkte 1926

Für ein relativ einfaches Kopieren/Einfügen für .NET-Anwendungen habe ich dies geschrieben, um CORS aus einer global.asax Datei. Dieser Code befolgt die in der aktuell akzeptierten Antwort gegebenen Ratschläge und spiegelt die in der Anfrage angegebene Herkunft in der Antwort wieder. Damit wird '*' effektiv erreicht, ohne es zu verwenden.

Der Grund dafür ist, dass dies mehrere andere CORS-Funktionen ermöglicht einschließlich der Möglichkeit, eine AJAX-XMLHttpRequest mit dem Attribut "withCredentials" auf "true" gesetzt zu senden.

void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.HttpMethod == "OPTIONS")
    {
        Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
        Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
        Response.AddHeader("Access-Control-Max-Age", "1728000");
        Response.End();
    }
    else
    {
        Response.AddHeader("Access-Control-Allow-Credentials", "true");

        if (Request.Headers["Origin"] != null)
            Response.AddHeader("Access-Control-Allow-Origin" , Request.Headers["Origin"]);
        else
            Response.AddHeader("Access-Control-Allow-Origin" , "*");
    }
}

3voto

timhc22 Punkte 6691

AWS Lambda/API-Gateway

Informationen zur Konfiguration mehrerer Ursprünge auf Serverless AWS Lambda und API Gateway - wenn auch eine ziemlich umfangreiche Lösung für etwas, von dem man meinen sollte, dass es recht einfach ist - finden Sie hier:

https://stackoverflow.com/a/41708323/1624933


Es ist derzeit nicht möglich, mehrere Ursprünge in API Gateway zu konfigurieren, siehe hier: https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors-console.html ), aber die Empfehlung (in der obigen Antwort) lautet:

  • den vom Browser gesendeten Origin-Header untersuchen
  • mit einer Whitelist der Ursprünge abgleichen
  • wenn er übereinstimmt, wird der eingehende Ursprung als Access-Control-Allow-Origin-Header zurückgegeben, andernfalls wird ein Platzhalter (Standardursprung) zurückgegeben.

Die einfache Lösung ist natürlich die Aktivierung ALL (*) wie folgt:

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS
        },
        body: JSON.stringify([{

Es könnte jedoch besser sein, dies auf der API-Gateway-Seite zu tun (siehe 2. Link oben).

3voto

Mike Kormendy Punkte 3298

Hier ist eine erweiterte Option für Apache, die einige der neuesten und geplanten Schriftartendefinitionen enthält:

<FilesMatch "\.(ttf|otf|eot|woff|woff2|sfnt|svg)$">
    <IfModule mod_headers.c>
        SetEnvIf Origin "^http(s)?://(.+\.)?(domainname1|domainname2|domainname3)\.(?:com|net|org)$" AccessControlAllowOrigin=$0$1$2
        Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        Header set Access-Control-Allow-Credentials true
    </IfModule>
</FilesMatch>

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