首页 > 解决方案 > CORS - 无法确定何时何地

问题描述

我正在制作一个 HotSpot,每次我尝试记录它时都会说:

跨域请求被阻止。同源策略不允许在http://10.5.50.1/Login读取远程资源。(原因:缺少 CORS 标头“Access-Control-Allow-Origin”)。

首先,我必须承认我只了解 CORS 的原理。我对实用方面的理解很模糊,我在 mozilla 上阅读的文档并没有太大帮助。我也在 Stack Overflow 上阅读了很多帖子,但我没有找到我正在寻找的答案。

我想知道 CORS 标头需要放在哪里(HTML、PHP 等)。此外,应如何以及在何处声明 PHP CORS 标头。还应在何时何地放置 HTML CORS 标头。最后,我应该把 Apache CORS 标头放在哪里。

我尝试了各种选择,但无法使其发挥作用。

路由器/热点托管一个登录页面,在用户输入信息后,会发布两个 ajax 帖子。第一次登录用户(他获得了互联网访问权限),第二次将一些信息发送到网络外部的 apache 服务器,php 将一些信息保存到数据库中。

正如我之前提到的,我对 CORS 应该如何工作只有一个模糊的想法,因此非常欢迎任何指针、更正等。

此外,如果您需要任何其他信息,请直接说出来。我不知道还能提供什么,我不想用毫无意义的信息来聚集帖子。

这是当前的代码。

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)

这是Mikrotik 特有的,据我所知,它必须以这种方式设置(但仍然不起作用)。

阿帕奇

<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 意外关闭。这可能是由于端口被阻塞、缺少依赖项、权限不正确、崩溃或被其他方法关闭造成的。按日志按钮查看错误日志并检查 Windows 事件查看器以获取更多线索如果您需要更多帮助,请复制并在论坛上发布整个日志窗口。

当然,日志中没有任何内容可以表明问题所在。

感谢您的帮助。

标签: corsmikrotik

解决方案


所以在我做了更多的挖掘之后,我发现我已经为 Mikrotik Hotspot 设置了一个 DNS 名称(这是设置热点时的选项之一)。AJAX 调用实际上是对我不拥有的那个网站/DNS 进行的。

从热点设置中删除 DNS 名称后,我不再收到消息。

希望这对将来的某人有所帮助。享受


推荐阅读