cors - 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 事件查看器以获取更多线索如果您需要更多帮助,请复制并在论坛上发布整个日志窗口。
当然,日志中没有任何内容可以表明问题所在。
感谢您的帮助。
解决方案
所以在我做了更多的挖掘之后,我发现我已经为 Mikrotik Hotspot 设置了一个 DNS 名称(这是设置热点时的选项之一)。AJAX 调用实际上是对我不拥有的那个网站/DNS 进行的。
从热点设置中删除 DNS 名称后,我不再收到消息。
希望这对将来的某人有所帮助。享受
推荐阅读
- prolog - 斐波那契数列递归语法错误
- c - 为什么用 %s 打印 char * 会打印“(null)”?
- r - 使用 geom_signif 为两个处理的条形图添加重要层
- google-sheets-formula - 如果 Google 表格中的数据不为空,则自动在单元格中填充当前日期
- html - 尝试在工作区中绑定“/%PUBLIC_URL%/manifest.json”失败,因为在 Netlify 上运行时此 URI 格式错误
- java - Spring API 返回 XML 而不是 JSON
- amazon-web-services - 由于超时错误,无法通过浏览器和 ssh 访问 AWS ec2 实例
- scrapy - 运行具有多个 start_urls 的scrapy spider时缺少导出结果
- jenkins - 如何从 jenkins 轮询最新的产品版本
- mysql - 是否可以在 Lumen/Laravel 中批量插入后将数据添加到相关表中?