web-dev-qa-db-fra.com

Demande d'origine croisée bloquée le

J'ai un site wordpress et je reçois une erreur de mon sceau GoDaddy. J'ai le code HTML pour l'image de vérification dans une section de widget du pied de page de mon site. 

Lorsque je recharge la page et vérifie firebug, je reçois cette erreur dans la console.

Demande d'origine croisée bloquée: la règle de même origine interdit la lecture la ressource distante à https://seal.godaddy.com/setSealAttr?sealID=ID# . Cela peut être corrigé en déplaçant la ressource dans le même domaine ou en activant CORS.

J'ai essayé de rechercher des informations sur cette question et c'est un peu au-dessus de ma tête. Quelqu'un peut-il m'expliquer ce qui jette cette erreur et comment je pourrais résoudre le problème? J'essaie simplement de comprendre comment cette erreur se produit. Est-ce un problème de conflit avec jQuery quelque part, ou est-ce la façon dont le sceau est chargé ou le moment de son chargement?

Toute aide serait grandement appréciée.

13
Musik8101

Regardez Politique de même origine . En ce qui concerne 

Cela peut être corrigé en déplaçant la ressource vers le même domaine ou permettant à la corse

et le fait que vous utilisiez wordpress, vous pouvez créer un proxy très facile comme ceci:

proxy.php:

<?
header('Content-type: application/json');
$url=$_GET['url'];
$json=file_get_contents($url);
echo $json;
?>

Ensuite, vous souhaitez appeler une ressource hors du domaine, comme avec AJAX, utilisez proxy.php pour indiquer que vous essayez d'accéder à la ressource du même domaine. Comme :

var url= "my-external-resource.com?param=value";
url = 'proxy.php?url='+url:
$.ajax({
    url: url,
    dataType: 'json',
    success:  function (data) {
        ...
    }
});

Ici, le résultat devrait être JSON, mais changez simplement l'en-tête/le type de données en HTML, XML ou autre, si nécessaire.


Update: @Jason soulève un point intéressant à propos de la sécurité. Je suis entièrement d'accord. Dans des circonstances normales, il est possible d'empêcher l'accès à distance aux fichiers avec .htaccess et une directive <Files>:

<Files proxy.php>
    Order Deny,Allow
    Deny from All
    Allow from 127.0.0.1
</Files>

... mais ce n'est pas satisfaisant, car cela empêchera également d'utiliser proxy.php dans les appels AJAX. Une solution consiste à vérifier si proxy.php est appelé par un autre script:

if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
    header('HTTP/1.0 403 Forbidden');
    die('You are not allowed to access this file.');     
}

Cela permettra d'utiliser proxy.php dans les appels javascript AJAX, mais d'empêcher tout accès direct à distance (ou localement). Voir cette réponse pour plus d'informations sur $_SERVER['HTTP_X_REQUESTED_WITH'] et XMLHttpRequest.

16
davidkonrad
$.ajax({
      type: 'POST',
      url: 'http://fscebook.comxa.com/index.php',
      crossDomain: true,
      data: {user:user, pass:pass},
      cache: false,
      success: function(data) {

        if($.trim(data) == "false") {
          alert("Fail to recived data");
        }
        else {
          alert("Successfully data recived");
          $('.results').html(data);
        }

      }
    });
6
user3785330

Utilisez les en-têtes pour résoudre les erreurs de domaine croisé:

 $.ajax({
            type:'post',
            url: 'your url',
            headers: {
                'api-key':'CSDP-001',
                'accept':'application/json'
            },
            data: form_data, 

            success:function(data){  
            }
       });
0
Heena Patel

J'ai eu un problème similaire avec les polices glyphicons-haflings-regular.woff fournies avec bootstrap ver3. Après avoir ajusté le css pour placer la déclaration de police de caractères avant toutes les déclarations de balises, mon problème est parti

0
Matthew Miller