495 Stimmen

Access-Control-Allow-Origin Platzhalter für Subdomänen, Ports und Protokolle

Ich versuche, CORS für alle Subdomänen, Ports und Protokolle zu aktivieren.

Ich möchte zum Beispiel eine XHR-Anfrage von http://sub.mywebsite.example:8080/ まで https://www.mywebsite.example/ *

In der Regel möchte ich Anfragen aus den entsprechenden Herkunftsländern aktivieren (und auf diese beschränken):

//*.mywebsite.example:*/*

0voto

seaders Punkte 3612

Ich wollte eine Multi-Domain-Option, und das ist die Lösung, die ich verwende, mit python y flask ,

    VALID_DOMAINS = 'https://subdomain1.example.com', 'https://subdomain2.example.com'

    def handle_request(request):
        origin = request.headers.get('Origin')

        if request.method == 'OPTIONS':
            if origin not in :
                return ''

            headers = {
                'Access-Control-Allow-Origin': origin,
                'Access-Control-Allow-Methods': 'GET',
                'Access-Control-Allow-Headers': 'Content-Type',
                'Access-Control-Max-Age': '3600',
            }
            return '', 204, headers

        return (
            main_function_with_logic(request),
            200,
            {'Access-Control-Allow-Origin': origin,
             ...}
        )

Sie können die VALID_DOMAINS natürlich auf eine beliebige Länge erweitern (nicht-https, anderer Port, etc.) und sie einfach bei der Anfrage überprüfen.

Ich ziehe diese Lösung einer Wildcard-Lösung vor, daher ist dies meine Wahl für die von mir betriebenen Server.

0voto

dan carter Punkte 3819

Für Spring sollten Sie Folgendes verwenden allowedOriginPatterns macht es genau das, was Sie wollen

Alternative zu setAllowedOrigins(java.util.List<java.lang.String>), die zusätzlich zu den Port-Listen flexiblere Herkunftsmuster mit "*" an beliebiger Stelle im Hostnamen unterstützt. Beispiele:

https://*.domain1.com -- domains ending with domain1.com
https://*.domain1.com:[8080,8081] -- domains ending with domain1.com on port 8080 or port 8081
https://*.domain1.com:[*] -- domains ending with domain1.com on any port, including the default port 

Im Gegensatz zu allowedOrigins, das nur " " und kann nicht mit allowCredentials verwendet werden. Wenn ein allowedOriginPattern übereinstimmt, wird der Access-Control-Allow-Origin-Antwort-Header auf den übereinstimmenden Ursprung und nicht auf " " noch zum Muster. Daher kann allowedOriginPatterns in Kombination mit setAllowCredentials(java.lang.Boolean), das auf true gesetzt ist, verwendet werden.

Zum Beispiel:

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            List<String> allowedOrigins = List.of("https://*.example.com", "http://*.example2.com[80,8080]");
            registry.addMapping("/**").allowedOriginPatterns(allowedOrigins.toArray(new String[0]));

        }
    };
}

-6voto

hosam hemaily Punkte 367

In meinem Fall mit Angular

In meinem HTTP-Interceptor habe ich

with Credentials: true.

in der Kopfzeile der Anfrage

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