Solicitud de origen cruzado Bloqueado: La política del mismo origen no permite leer el recurso remoto - permite CORS en xampp

votos
-1

Estoy tratando de recibir datos JSON utilizando XmlHttpRequest de otro archivo en el mismo servidor, es decir localhost. Pero estoy de origen cruzado petición bloqueada: La política del mismo origen no permite leer el recurso remoto en https: //localhost/folder/data.php . (Razón: solicitud CORS no tuvo éxito).

He intentado utilizar diferentes soluciones en busca del SO pero nada de trabajo. Las soluciones que probé incluyen la adición Header set Access-Control-Allow-Origin *de Apache en el archivo httpd.con. No funcionó.

A continuación, a añadir una solución de código php, añadí cabecera php

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

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

en el fichero de data.php que está enviando datos JSON del servidor. Pero el mismo resultado.

También he añadido nombre de archivo específico que solicita JSON como header(Access-Control-Allow-Origin: https://localhost.request.php); pero no logré.

Aquí está mi archivo data.php para enviar datos 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>

código 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>
Publicado el 19/09/2018 a las 13:30
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
-3

"Uso compartido de recursos de origen cruzado (CORS) es una relajación de seguridad medida que debe ser implementado en algunas API con el fin de permitir que los navegadores web a acceder. Sin embargo, cuando CORS está activado por un desarrollador de servicios de fondo algunos análisis de seguridad que hay que hacer con el fin de asegurarse de que no se relaja la seguridad de su servidor demasiado ". (de https://mobilejazz.com/blog/which-security-risks-do-cors-imply/ )

CORS no es necesariamente peligroso han permitido, siempre y cuando usted entienda y mitigar los riesgos. Sin embargo, existe una solución alternativa que no requiere tener CORS habilitados.

En lugar de llamar a un dominio diferente de Javascript, crear una página proxy en PHP, que puede llamar a otro dominio a través de rizo / engullen, y no se preocupa por CORS.

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

Luego, en su 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);

A continuación, trabajar en los datos, y envía su respuesta JSON!

Una última cosa. Antes de reflejar su JSON, enviar la cabecera Content-Type correcta:

header('Content-Type: application/json');
echo $json;
exit;
Respondida el 19/09/2018 a las 13:54
fuente por usuario

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