Firefox 'demande D'origine croisée bloquée' malgré les en-têtes

j'essaie de faire une simple requête cross-origin, et Firefox le bloque systématiquement avec cette erreur:

demande D'origine croisée bloquée: la même Politique d'origine interdit la lecture de la ressource distante à [url]. Ceci peut être corrigé en déplaçant la ressource vers le même domaine ou en activant CORS. [url]

il fonctionne très bien dans le Chrome et le Safari.

autant que je sache, j'ai mis tous les corriger les en-têtes sur mon PHP pour permettre à cela de fonctionner. Voici la réponse de mon serveur avec

HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html

j'ai essayé D'utiliser angulaire, JQuery et un XMLHTTPRequest objet de base, comme ainsi:

var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()

...et ça marche dans tous les navigateurs sauf Firefox. Quelqu'un peut-il aider?

72
demandé sur Godwhacker 2014-06-23 21:22:15

9 réponses

S'avère que cela n'a rien à voir avec CORS - c'était un problème avec le certificat de sécurité. Erreurs = 4 heures de maux de tête.

82
répondu Godwhacker 2014-06-24 11:06:20

j'ai trouvé que mon problème était que le serveur à qui j'ai envoyé la requête croisée avait un certificat qui n'était pas fiable.

Si vous souhaitez vous connecter à une croix de domaine avec https , vous devez ajouter une exception pour ce certificat.

vous pouvez le faire en visitant le lien bloqué une fois et en ajoutant l'exception.

14
répondu Cracker0dks 2018-09-26 19:56:41

j'ai trouvé la solution après 2 jours :(.

Note importante: lors de la réponse à une demande validée, le serveur doit spécifiez un domaine, et ne peut pas utiliser de caractères sauvages.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials

6
répondu Hoàng Quân 2016-12-01 02:51:59

Juste un mot d'avertissement. J'ai finalement contourné le problème avec Firefox et CORS.

la solution pour moi était ce poste

Réglage de CORS (cross-origin resource sharing) sur un serveur Apache avec les bons en-têtes de réponse permettant à tout à l'aide de | Benjamin Corne

cependant Firefox se comportait vraiment, vraiment étrange après avoir mis ces en-têtes sur le serveur Apache (dans le dossier .htaccess).

j'ai ajouté beaucoup de console.log("Hi FF, you are here A") etc pour voir ce qui se passait.

au début, on aurait dit qu'il avait été pendu sur xhr.send() . Mais j'ai découvert qu'il n'était pas arrivé à cette déclaration. J'ai placé un autre console.log juste avant et n'y suis pas arrivé - même s'il n'y avait rien entre le dernier console.log et le nouveau. Il s'est arrêté entre deux console.log .

modifier l'Ordre des lignes, Supprimer, pour voir s'il y avait personnage étrange dans le dossier. Je n'ai rien trouvé.

redémarrer Firefox a réglé le problème.

Oui, je dois remplir un rapport de bogue. C'est juste que c'est tellement étrange, alors ne sais pas comment le reproduire.

NOTICE : et, oh, je viens de faire les parties Header always set , pas la partie Rewrite* !

4
répondu Leo 2015-01-19 03:11:51

il suffit d'ajouter

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

à la .htaccess fichier dans la racine du site web que vous essayez de vous connecter avec.

2
répondu Gareth 2016-11-16 12:54:58

essayez ceci, cela devrait résoudre votre problème

  1. dans votre configuration.php, ajouter www pre dans votre domain.com. Par exemple:

    HTTP define('HTTP_SERVER', 'http://domain name with www/');
    HTTPS define('HTTPS_SERVER', 'http://domain name with www/');
    
  2. ajoutez ceci à votre .fichier htaccess

    RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$  [R=200,L]
    
1
répondu Dharmendra Manikpuri 2018-07-06 15:40:33

pour moi, il s'avère que je mettais Access-Control-Allow-Origin à un spécifique (et le correct) host.com mais il devait être http://host.com à la place. Qu'est-ce que firefox? Il avale silencieusement la requête GET et renvoie un statut 0 à la XHR, sans aucune sortie de warnings à la console javascript, alors que pour d'autres échecs similaires, il dirait au moins quelque chose. Ai ai.

0
répondu rogerdpack 2017-04-28 16:05:30

Les fichiers sont explicites. Faites un dossier, appelez ça n'importe quoi. Dans mon cas, jq2.php.

<html>
<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
    // document is made ready so that the program starts when we load this page       
    $(document).ready(function(){

        // it tells that any key activity in the "subcat_search" filed will execute the query.
        $("#subcat_search").keyup(function(){

            // we assemble the get link for the direction to our engine "gs.php". 
            var link1 = "http://127.0.0.1/jqm/gs.php?needle=" + $("#subcat_search").val();

            $.ajax({
                url: link1,
                // ajax function is called sending the input string to "gs.php".
                success: function(result){
                    // result is stuffed in the label.
                    $("#search_val").html(result);
                }
            });
        })   

    });
</script>
</head>

<body>

<!-- the input field for search string -->
<input type="text" id="subcat_search">
<br>
<!-- the output field for stuffing the output. -->
<label id="search_val"></label>

</body>
</html>

maintenant nous allons inclure un moteur, faire un fichier, appelez-le comme vous voulez. Dans mon cas, c'est gs.php.

$head = "https://maps.googleapis.com/maps/api/place/textsearch/json?query="; //our head
$key = "your key here"; //your key
$hay = $_GET['needle'];

$hay = str_replace(" ", "+", $hay); //replacing the " " with "+" to design it as per the google's requirement 
$kill = $head . $hay . "&key=" . $key; //assembling the string in proper way . 
print file_get_contents($kill);

j'ai essayé de garder l'exemple aussi simple que possible. Et parce qu'il exécute le lien sur chaque keypress, le quota de votre API sera consommé assez rapidement.

bien sûr, il n'y a pas de fin des choses que nous pouvons faire, comme mettre les données dans une table, Envoyer à la base de données et ainsi de suite.

-4
répondu Harsh Mehta 2015-12-10 20:01:09

il semble que ce soit un bug sur Firefox 44 qui a été corrigé sur la version 45.

-4
répondu Douglas 2016-03-17 14:48:51