93 votes

L'en-tête Access-Control-Allow-Origin dans .htaccess ne fonctionne pas

Je n'arrive pas à comprendre pourquoi mon .htaccess Les paramètres de l'en-tête ne fonctionnent pas.

Mi .htaccess le contenu du fichier :

Header set Access-Control-Allow-Origin *
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers "*"
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

Mais quand je retire Header et les ajouter dans index.php alors tout fonctionne bien.

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: *");

Qu'est-ce que j'ai manqué ?

7voto

truthblue82 Points 129

J'ai activé le module Apache headers a2enmod headers, et le problème a été résolu.

6voto

Vo Quoc Cuong Points 248

Essayez ceci dans le .htaccess du dossier racine externe

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Soyez prudent en faisant Header add Access-Control-Allow-Origin "*" Ce n'est pas du tout judicieux d'accorder l'accès à tout le monde. Je pense que vous devriez utiliser :

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "http://example.com"
</IfModule>

3voto

Dave Burton Points 825

J'ai ajouté un +1 à la réponse de Miro pour le lien vers le site de vérification des en-têtes. http://www.webconfs.com/http-header-check.php . Il fait apparaître une publicité désagréable à chaque fois que vous l'utilisez, mais il est néanmoins très utile pour vérifier la présence de l'en-tête Access-Control-Allow-Origin.

Je lis un fichier .json à partir du javascript de ma page web. J'ai constaté que l'ajout de ce qui suit à mon fichier .htaccess a permis de résoudre le problème lors de l'affichage de ma page Web dans IE 11 (version 11.447.14393.0) :

<FilesMatch "\.(json)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>

J'ai également ajouté les éléments suivants au fichier /etc/httpd.conf (fichier de configuration d'Apache) :

AllowOverride All

Le site de vérification des en-têtes a vérifié que l'en-tête Access-Control-Allow-Origin est maintenant envoyé (merci, Miro !).

Cependant, Firefox 50.0.2, Opera 41.0.2353.69, et Edge 38.14393.0.0 récupèrent tous le fichier de toute façon, même si sans l'en-tête Access-Control-Allow-Origin. (Note : ils pourraient vérifier les adresses IP, puisque les deux domaines que j'utilisais sont tous deux hébergés sur le même serveur, à la même adresse IPv4).

Cependant, Chrome 54.0.2840.99 m (64 bits) ignore l'en-tête Access-Control-Allow-Origin et échoue de toute façon, en signalant par erreur :

L'en-tête "Access-Control-Allow-Origin" n'est pas présent dans le message demandé. demandée. Origine ' {mydomain} L'accès est donc interdit.

Je pense que ça doit être une sorte de "première". IE fonctionne correctement ; Chrome, Firefox, Opera et Edge sont tous bogués ; et Chrome est le le pire . N'est-ce pas l'exact opposé du cas habituel ?

0voto

Après avoir passé une demi-journée sans que rien ne fonctionne. En utilisant un service de vérification des en-têtes, tout fonctionnait. Le pare-feu au travail les dépouillait

0voto

behnam shateri Points 400

Essayez ceci :

<IfModule mod_headers.c>
     Header set Access-Control-Allow-Credentials true
     Header set Access-Control-Allow-Origin "your domain"
     Header set Access-Control-Allow-Headers "X-Requested-With"
</IfModule>

Il est préférable d'autoriser une liste d'hôtes de confiance.

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