Cross-Origin Pedido Bloqueado: A política de mesma origem não permite a leitura do recurso remoto - permitir CORS no xampp

votos
-1

Estou tentando receber dados JSON usando XmlHttpRequest de outro arquivo no mesmo servidor ou seja, localhost. Mas eu estou recebendo Cross-Origin Pedido Bloqueado: A política de mesma origem proibindo as de ler o recurso remoto em https: //localhost/folder/data.php . (Razão: pedido CORS não teve êxito).

Eu tentei usar diferentes soluções em busca do SO, mas nada de trabalho. As soluções que eu tentei incluir a adição Header set Access-Control-Allow-Origin *de apache no arquivo httpd.con. Não funcionou.

Em seguida, adicionar solução em código php, eu adicionei php header

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

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

para o arquivo data.php que está enviando dados JSON do servidor. Mas mesmo resultado.

Eu também acrescentou o nome de arquivo específico solicitando json como header(Access-Control-Allow-Origin: https://localhost.request.php); Mas não conseguiu.

Aqui está o meu arquivo data.php para enviar dados 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 19/09/2018 em 13:30
fonte usuário
Em outras línguas...                            


1 respostas

votos
-3

"Cross-origem compartilhamento de recursos (CORS) é um relaxamento segurança medida que precisa ser implementado em algumas APIs, a fim de permitir que os navegadores web acessá-los. No entanto, quando CORS é ativado por um desenvolvedor de back-end algumas análises de segurança precisa ser feito a fim de garantir que você não está relaxando sua segurança servidor muito." (a partir de https://mobilejazz.com/blog/which-security-risks-do-cors-imply/ )

CORS não é necessariamente perigosa para ter activado, desde que você entender e mitigar os riscos. No entanto, há uma solução alternativa que não necessita de ter CORS ativado.

Em vez de chamar um domínio diferente do Javascript, criar uma página proxy no PHP, que pode chamar o outro domínio via onda / consomem, e não se preocupa com CORS.

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

Em seguida, no seu 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);

Em seguida, trabalhar sobre os dados e enviar a sua resposta JSON!

Uma última coisa. Antes ecoando seu JSON, enviar o cabeçalho Content-Type correto:

header('Content-Type: application/json');
echo $json;
exit;
Respondeu 19/09/2018 em 13:54
fonte usuário

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