CORS - проблема выяснения, где и когда - PullRequest
0 голосов
/ 06 января 2020

Я создаю HotSpot, и каждый раз, когда я пытаюсь войти в систему, он постоянно говорит:

Cross-Origin-Request Blocked. Такая же политика происхождения запрещает чтение удаленного ресурса на http://10.5.50.1/Login. (Причина: отсутствует заголовок CORS «Access-Control-Allow-Origin».)

Прежде всего, я должен признать, что понимаю только принцип CORS. Практическую сторону я понимаю лишь смутно, и документация, которую я прочитал на Mozilla, не сильно помогла. Я также прочитал много постов здесь о переполнении стека, но я не нашел нужного мне ответчика.

Я хотел бы знать, где нужно разместить заголовки CORS (HTML, PHP и др c.). Кроме того, как и где должен быть указан заголовок PHP CORS. Также, где и когда должен быть размещен заголовок HTML CORS. И, наконец, куда мне поместить заголовок Apache CORS.

Я пробовал различные варианты, но просто не могу заставить его работать.

Маршрутизатор / точка доступа размещает страницу входа после того, как пользователь вводит информацию, создаются два ajax сообщения. 1-й вход в систему пользователя (он получает доступ rnet), 2-й отправляет некоторую информацию на сервер apache, который находится за пределами сети, где php сохраняет некоторую информацию в базу данных.

Как я упоминал ранее, у меня есть только смутные представления о том, как CORS должен работать, поэтому любые указатели, исправления и т. Д. c. очень приветствуются.

Также, если вам нужна дополнительная информация, просто скажите. Я не знаю, что еще предоставить, и я не хотел кластеризовать сообщение с бессмысленной информацией.

Вот код, который есть на данный момент.

PHP

<?php
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/x-www-form-urlencoded, multipart/form-data');
header('Access-Control-Allow-Methods: POST');
$host = "localhost";
$userName = "root";
$password = "";
$dbName = "baza";
// Create database connection
$DB = new mysqli ($host, $userName, $password, $dbName);
// Check connection
    if ($DB->connect_error) {
        die("Connection failed: " . $DB->connect_error);
    }
?>

HTML

$(if http-header == "Access-Control-Allow-Origin")http://realhotspot.com$(endif)
$(if http-header == "Access-Control-Allow-Origin")http://10.5.50.1/login$(endif)
$(if http-header == "Access-Control-Allow-Origin")http://10.5.50.1$(endif)
$(if http-header == "Access-Control-Allow-Origin")*$(endif)

это задано c до Mikrotik , и, насколько я понимаю, должно быть установлено таким образом (все еще не работает хотя).

Apache

<Directory>
    AllowOverride none
    Require all denied

    #I added this
    Header set Access-Control-Allow-Origin "*"
</Directory>

#And I added this right after the </Directory>
<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS"/>
    <add name="Access-Control-Allow-Headers" value="Authorization, Origin, X-Requested-With, Content-Type, Accept"/>
  </customHeaders>
</httpProtocol>

После того, как я добавил код Apache, он перестал работать, я получил эту ошибку:

Ошибка: Apache неожиданно завершил работу. Это может быть связано с заблокированным портом, отсутствующими зависимостями, неправильными привилегиями, cra sh или отключением другим способом. Нажмите кнопку «Журналы», чтобы просмотреть журналы ошибок и проверить Windows Event Viewer для получения дополнительных подсказок. Если вам нужна дополнительная помощь, скопируйте и опубликуйте все это окно журнала на форумах.

И, естественно, ничего нет в логах, которые бы указывали в чем проблема.

Спасибо за помощь.

1 Ответ

0 голосов
/ 07 января 2020

Итак, после того, как я сделал еще несколько копаний, я обнаружил, что настроил DNS-имя для Mikrotik Hotspot (который является одним из вариантов при настройке точки доступа). На самом деле AJAX были сделаны звонки на этот сайт / DNS, которым я не владею.

После удаления DNS-имени из настройки Hotspot сообщение больше не появляется.

Надеюсь, это поможет кому-то в будущем. Наслаждайтесь

...