Cross-origin Demande Bloqué: la même politique Origine lecture de la ressource interdit à distance - permet CORS sur xampp

voix
-1

Je suis en train de recevoir des données JSON en utilisant XMLHttpRequest d'un autre fichier sur le même serveur -à- dire localhost. Mais je reçois demande Cross-origin Bloqué: la même origine politique de la ressource lecture non de partager à distance à l' adresse https: //localhost/folder/data.php . (Raison: demande de CORS n'a pas réussi).

J'ai essayé d' utiliser différentes solutions à la recherche de la SO , mais rien de travail. Les solutions que j'ai essayé comprennent l' ajout Header set Access-Control-Allow-Origin *dans le fichier httpd.con apache. Il ne fonctionne pas.

Puis ajouter la solution dans le code php, j'ai ajouté php header

<?php
 header(Access-Control-Allow-Origin: *);
 header('Content-Type: application/json');

 header('Content-Type: application/json');
?>

au fichier data.php qui est l'envoi de données JSON du serveur. Mais même résultat.

J'ai aussi ajouté le nom de fichier spécifique demandant JSON comme header(Access-Control-Allow-Origin: https://localhost.request.php« ), mais il n'a pas réussi.

Voici mon fichier data.php pour envoyer des données JSON.

Data.php

    <!DOCTYPE html>
<html lang=en>

<?php
header('Access-Control-Allow-Origin: http://localhost/folder/request.php');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');

header('Content-Type: application/json');
?>
    <head>
    <meta http-equiv=refresh content=300>
    <title>Weather Data</title>
    <meta charset=utf-8>

</head>
<body> 


    <?php

    require(Connection2.php);

    $stmt = $conn->prepare(Select humidity, temperature FROM weatherdata);
    $stmt->execute();

    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
    $WData = array();
    foreach($stmt->fetchAll() as $k=>$v) {       
    $WData[] = $v;
    }
    echo json_encode($WData);
    ?>

    </body>
</html>

httpd.conf

  <Directory />
        AllowOverride none
        Require all denied
        Header set Access-Control-Allow-Origin *

  </Directory>


  <Files .ht*>
        Require all denied
        Header set Access-Control-Allow-Origin *
  </Files>

Code JS

 <script>

    function loadChart() { //fetches json data & calls dspChart() to render graph 
        var wData, hum, tem;
        var requestURL = 'https://localhost/folder/data.php'; //URL of the JSON data
        var request = new XMLHttpRequest({
        mozSystem: true
        }); // create http request
        request.onreadystatechange = function() {
        if (request.readyState == 4 && request.status == 200) {
        wData = JSON.parse(request.responseText);
        hum = wData.humidity;
        tem = wData.temperature;
        humArray.shift();
        humArray.push(hum);
        temArray.shift();
        temArray.push(tem);
        dspChrt(humArray, temArray);
        }
    }
        request.open('GET', requestURL);
        request.send(); **//statement causing CORS error;**
    }
        var myVar = setInterval(loadChart, 60000);
    </script>
Créé 19/09/2018 à 13:30
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
-3

« Le partage des ressources Cross-origin (CORS) est une relaxation de sécurité mesure qui doit être mis en œuvre dans certaines API afin de permettre aux navigateurs web les accès. Toutefois, lorsque CORS est activé par un développeur back-end une analyse de sécurité doit être fait afin de vous assurer que vous ne vous reposez pas trop votre sécurité du serveur. » ( à partir de https://mobilejazz.com/blog/which-security-risks-do-cors-imply/ )

CORS est pas nécessairement dangereux d'avoir permis, tant que vous comprenez et atténuer les risques. Cependant, il existe une solution alternative qui ne nécessite pas d'avoir CORS activé.

Au lieu d'appeler un domaine différent de Javascript, créez une page proxy en PHP, qui peut appeler l'autre domaine par boucle / bâfrer, et il ne se soucie pas CORS.

$('#mybutton').click(function(){
    $.get('/another/page/on/the/same/site', {vars: here}, function(e){
        console.log(e); // Whatever your scrtipt sends back
    });
});

Ensuite, dans votre script PHP:

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://the-domain-blocked-by-cors/some/endpoint");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
            "postvar1=value1&postvar2=value2&postvar3=value3");

// in real life you should use something like:
// curl_setopt($ch, CURLOPT_POSTFIELDS, 
//          http_build_query(array('postvar1' => 'value1')));

// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$server_output = curl_exec ($ch);

curl_close ($ch);

Ensuite, travailler sur les données, et envoyez votre réponse JSON!

Une dernière chose. Avant votre écho JSON, envoyez une entête Content-Type:

header('Content-Type: application/json');
echo $json;
exit;
Créé 19/09/2018 à 13:54
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more