238 votes

CORS mortel quand http: // localhost est l'origine

Je suis coincé avec ce problème CORS, même si je configure le serveur (nginx / node.js) avec les en-têtes appropriés.

Je peux voir dans le volet Réseau de Chrome -> En-têtes de réponse:

 Access-Control-Allow-Origin:http://localhost
 

ce qui devrait faire l'affaire.

Voici le code que je utilise maintenant pour tester:

 var xhr = new XMLHttpRequest();
xhr.onload = function() {
   console.log('xhr loaded');
};
xhr.open('GET', 'http://stackoverflow.com/');
xhr.send();
 

Je reçois

 XMLHttpRequest cannot load http://stackoverflow.com/. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
 

Je soupçonne que c'est un problème dans le script client et pas dans la configuration du serveur ...

279voto

Beau Points 3353

Chrome ne prend pas en charge localhost pour les demandes CORS (bogue ouvert depuis 2010).

Pour contourner ce problème, vous pouvez utiliser un domaine tel que lvh.me (qui pointe sur 127.0.0.1 exactement comme localhost) ou lancer chrome avec l'indicateur --disable-web-security (en supposant que vous testez simplement).

22voto

greensuisse Points 512

Le vrai problème, c'est que si nous définissons l'option Autoriser pour toutes les demandes (OPTIONS & POST), Chrome l'annule. Le code suivant fonctionne pour moi avec POST to LocalHost with Chrome

 <?php
if (isset($_SERVER['HTTP_ORIGIN'])) {
    //header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header("Access-Control-Allow-Origin: *");
    header('Access-Control-Allow-Credentials: true');    
    header("Access-Control-Allow-Methods: GET, POST, OPTIONS"); 
}   
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");         
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

    exit(0);
} 
?>
 

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