Cross-Origin Request Заблокировано: The Same Origin Policy запрещает чтение удаленного ресурса - включить CORS на XAMPP

голоса
-1

Я пытаюсь получить данные с помощью JSON XmlHttpRequest из другого файла на одном сервере , т.е. локальный. Но я получаю Cross-Origin Request заблокированный: The Same Origin Policy Запрещает чтение удаленного ресурса на https: //localhost/folder/data.php . (Причина: запрос CORS не удалось).

Я попытался с помощью различных решений , которые ищут от SO , но ничего работы. Решения я попытался включать в себя добавление Header set Access-Control-Allow-Origin *к апачу в файле httpd.con. Это не сработало.

Затем добавить решение в PHP-код, я добавил заголовок PHP

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

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

в файл data.php, что передавший данные JSON от сервера. Но тот же результат.

Я также добавил имя конкретного файла запрашивающего JSON как header(Access-Control-Allow-Origin: https://localhost.request.php«), но это не удалось.

Вот мой data.php файл для отправки данных 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>

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>
Задан 19/09/2018 в 13:30
источник пользователем
На других языках...                            


1 ответов

голоса
-3

«Cross-Origin совместного использования ресурсов (CORS) является ослабление безопасности мера , которая должна быть реализована в некоторых API , для того , чтобы позволить веб - браузеры доступ к ним. Тем не менее, когда CORS включена по фоновому разработчика некоторый анализ безопасности должно быть сделано для того , чтобы гарантировать , что вы не расслабляя безопасности сервера слишком много «. (от https://mobilejazz.com/blog/which-security-risks-do-cors-imply/ )

CORS не обязательно опасно быть включен до тех пор, как вы понимаете, и снизить риски. Тем не менее, есть альтернативное решение, которое не требует, имеющего CORS включено.

Вместо вызова другого домена Javascript, создать страницу прокси в PHP, который может вызывать другой домен через завиток / жрать, и он не заботится о CORS.

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

Затем в 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);

Затем работа над данными, и отправить свой ответ в формате JSON!

Одна последняя вещь. Перед вторя ваш JSON, отправить правильный заголовок Content-Type:

header('Content-Type: application/json');
echo $json;
exit;
Ответил 19/09/2018 d 13:54
источник пользователем

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