CORS - 难以弄清楚何时何地



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

跨源请求被阻止。同源策略不允许在 http://10.5.50.1/Login 读取远程资源。(原因:缺少 CORS 标头"访问控制-允许源"(。

首先,我必须承认,我只了解CORS的原理。我只是模糊地理解了实用的一面,我在 Mozilla 上阅读的文档并没有多大帮助。我也在Stack Overflow上阅读了许多帖子,但我没有找到我正在寻找的anwser。

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

我已经尝试了各种选项,但就是无法使其工作。

路由器/热点托管一个登录页面,在用户输入信息后,会发出两个 ajax 帖子。第一个登录用户(他获得互联网访问权限(,第二个cnd将一些信息发送到网络外部的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 事件查看器以获取更多线索 如果您需要更多帮助,请在论坛上复制并发布整个日志窗口。

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

谢谢你的帮助。

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

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

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

最新更新