452 votes

Sous-domaines, ports et protocoles joker, access-control-allow-origin

J'essaie d'activer CORS pour tous les sous-domaines, ports et protocoles.

Par exemple, je veux pouvoir exécuter une demande XHR depuis http://sub.mywebsite.com:8080/ vers https://www.mywebsite.com/ *

En règle générale, je voudrais activer la demande des origines correspondant (et limitée à):

//*.mywebsite.com:*/*

355voto

monsur Points 8340

La spécification CORS est tout ou rien. Il ne prend en charge que * , null ou le domaine exact: http://www.w3.org/TR/cors/#access-control-allow-origin-response-header

Votre serveur devra valider l'en-tête d'origine à l'aide de l'expression rationnelle, puis vous pourrez faire écho à la valeur d'origine dans l'en-tête de réponse Access-Control-Allow-Origin.

66voto

DaveRandom Points 45661

J'ai fait un peu de jeu autour de cette question et est venu avec cette réutilisables .htaccess (ou httpd.conf) solution qui fonctionne avec Apache:

<IfModule mod_rewrite.c>
<IfModule mod_headers.c>
    # Define the root domain that is allowed
    SetEnvIf Origin .+ ACCESS_CONTROL_ROOT=yourdomain.com

    # Check that the Origin: matches the defined root domain and capture it in
    # an environment var if it does
    RewriteEngine On
    RewriteCond %{ENV:ACCESS_CONTROL_ROOT} !=""
    RewriteCond %{ENV:ACCESS_CONTROL_ORIGIN} =""
    RewriteCond %{ENV:ACCESS_CONTROL_ROOT}&%{HTTP:Origin} ^([^&]+)&(https?://(?:.+?\.)?\1(?::\d{1,5})?)$
    RewriteRule .* - [E=ACCESS_CONTROL_ORIGIN:%2]

    # Set the response header to the captured value if there was a match
    Header set Access-Control-Allow-Origin %{ACCESS_CONTROL_ORIGIN}e env=ACCESS_CONTROL_ORIGIN
</IfModule>
</IfModule>

Il suffit de régler l' ACCESS_CONTROL_ROOT variable au sommet de l'îlot à la racine de votre domaine, et il se fera l'écho de l' Origin: - tête de la requête de la valeur pour le client dans l' Access-Control-Allow-Origin: - tête de réponse de valeur que si elle correspond à votre domaine.

Notez également que vous pouvez utiliser sub.mydomain.com le ACCESS_CONTROL_ROOT et limitera les origines de sub.mydomain.com et *.sub.mydomain.com (c'est à dire qu'il n'a pas à être la racine du domaine). Les éléments qui sont autorisés à varier (le protocole, le port) peut être contrôlée par la modification de l'URI de la partie correspondante de la regex.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X