CORS - 无法确定何时何地

CORS - trouble figuring out where and when

我正在制作一个 HotSpot,但每次我尝试记录它时,它总是说:

Cross-Origin-Request Blocked. The Same Origin Policy disallows reading the remote resource at http://10.5.50.1/Login. (Reason: CORS header 'Access-Control-Allow-Origin' missing).

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

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

放在哪里

我尝试了各种选择,但就是无法正常工作。

router/hotspot 正在托管一个登录页面,在用户输入信息后,会生成两个 ajax post。第一个登录用户(他获得互联网访问权限),第二个将一些信息发送到网络外部的 apache 服务器,其中 php 将一些信息保存到数据库中。

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

此外,如果您需要任何其他信息,请尽管说。我不知道还能提供什么,我不想将 post 与毫无意义的信息聚集在一起。

这是当前的代码。

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 代码后,它停止工作,我收到此错误:

Error: Apache shutdown unexpectedly. This may be due to a blocked port, missing dependencies, improper privileges, a crash, or a shutdown by another method. Press the Logs button to view error logs and check the Windows Event Viewer for more clues If you need more help, copy and post this entire log window on the forums.

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

感谢您的帮助。

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

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

希望这对以后的人有所帮助。 享受