Cross-Origin Request Blokkert: samme opprinnelse politikk forbyr lese den eksterne ressursen - aktiver kor på xampp

stemmer
-1

Jeg prøver å motta JSON data ved hjelp av XMLHttpRequest fra en annen fil på samme server dvs. localhost. Men jeg får Cross-Origin Request Blokkert: samme opprinnelse politikk forbyr lese den eksterne ressursen på https: //localhost/folder/data.php . (Grunn: kor forespørsel ikke lykkes).

Jeg prøvde å bruke forskjellige løsninger søker fra SO, men ingenting fungerer. Løsningene I prøvde omfatter å tilsette Header set Access-Control-Allow-Origin *til Apache i httpd.con fil. Det fungerte ikke.

Deretter for å legge løsning i php kode, la jeg php header

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

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

til data.php fil som er sende JSON data fra serveren. Men samme resultat.

Jeg har også lagt navnet bestemt fil ber json som header(Access-Control-Allow-Origin: https://localhost.request.php); Men det gjorde ikke lyktes.

Her er mitt data.php fil å sende JSON data.

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>

JS kode

 <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>
Publisert på 19/09/2018 klokken 13:30
kilden bruker
På andre språk...                            


1 svar

stemmer
-3

"Cross-opprinnelse ressursdeling (kor) er en sikkerhets avslapning tiltak som må iverksettes i enkelte APIer for å la nettlesere tilgang til dem. Men når kor er aktivert av en back-end utvikler noen sikkerhetsanalyse må gjøres for å sikre at du ikke slapper av din server sikkerhet for mye." (fra https://mobilejazz.com/blog/which-security-risks-do-cors-imply/ )

Kor er ikke nødvendigvis farlig å ha aktivert, så lenge du forstår og redusere risikoen. Men det er en alternativ løsning som ikke krever å ha kor aktivert.

I stedet for å ringe et annet domene fra Javascript, opprette en proxy side i PHP, som kan ringe andre domenet via curl / guzzle, og det bryr seg ikke om kor.

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

Så i din PHP-skript:

<?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);

Deretter arbeide på data, og sende JSON svar!

En siste ting. Før ekko din JSON, sende riktig Content-Type header:

header('Content-Type: application/json');
echo $json;
exit;
Svarte 19/09/2018 kl. 13:54
kilden bruker

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