CORS:对预检请求的响应未通过访问控制检查 - 如何在本地主机上解决它?

时间:2021-06-23 18:07:00

标签: javascript xmlhttprequest cors access-control

我是 JavaScript 的初学者,我正在尝试编写一个脚本来检查网站是否返回 404 状态代码或 200,然后根据结果,我将访问它或不是。我在前端做这个。我没有服务器端,因为该网站是一个不使用数据库的静态网站。 我正在使用 XMLHttpRequest 执行此操作。

https://example.com

问题是当我运行这个脚本时,抛出了以下异常:

从源 'null' 访问 url = $("#foo").attr("href") function UrlExists(ur) { var http = new XMLHttpRequest(); http.open('GET', ur, true); http.setRequestHeader("Access-Control-Allow-Origin", "http, https"); http.setRequestHeader("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTONS"); http.setRequestHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization") http.send(); console.log(http.status); } UrlExists(url) 处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有 'Access-Control-Allow-Origin' 标头存在于请求的资源。

从我目前阅读的内容来看,这是 CORS 问题而不是 JavaScript 问题,到目前为止我找不到解决方案。

有人可以帮我解决这个问题并解释原因吗? 我已经检查了关于 SO 的其他问题,到目前为止,我没有找到可行的解决方案。如果有的话,我也愿意接受其他解决方案。非常感谢!

非常感谢您的时间!

更新 1: 不幸的是,我仍在努力解决这个问题。我已经阅读了很多关于 CORS 政策的内容,问题是我不知道我应该如何安全地允许标头通过请求从我的服务器发送到另一个服务器。 资源是:一个 HTML 页面和其中的一些 JS 代码。正如我上面提到的,我试图从我的网站向另一个网站发送请求以检查该网站的状态,如果弹出 404,我想重定向我的用户。

1 个答案:

答案 0 :(得分:1)

您需要在您的网络服务器上设置 CORS 标头。出于安全原因,它默认处于禁用状态。

比如在 Nginx 中,你可以这样做

add_header Access-Control-Allow-Origin example.com;

如果您使用的托管服务不允许修改网络服务器配置,您可以将所需的标头添加到您的 .htaccess 文件中,如下所示。换句话说,把它放在你的项目的根目录中,在那里你有你的 index.html。另外,将权限更改为 644。

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"

参考文献:

https://stackoverflow.com/a/20082724/2777988

https://blog.container-solutions.com/a-guide-to-solving-those-mystifying-cors-issues

相关问题