express - 即使使用 Access-Control-Allow-Origin 也被 CORS 阻止的 API 调用:* 存在于标头中
问题描述
来自反应站点的 API 调用不断被 CORS 阻止,即使反应应用程序和 api 都带有Access-Control-Allow-Origin : *
标头以及允许的方法'GET,PUT,POST,DELETE,OPTIONS'
,并且也允许使用 cors 凭据
这是确切的错误:
Access to XMLHttpRequest at 'https://cbiapi.dailycode.tk/parse/classes/_Installation' from origin 'https://backoffice.dailycode.tk' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
网站网址: https ://backoffice.dailycode.tk/login API 网址: https ://cbiapi.dailycode.tk/parse
我不明白为什么我的 api 调用仍然被阻止,我尝试了 CORS 插件和其他类似的插件,但调用仍然被阻止
解决方案
您的客户请求(基于请求中的内容)触发了跨源飞行前检查。这意味着浏览器将向您的客户端发送一个 OPTIONS 请求(发送到请求的同一 URL),并且它希望返回 2xx 状态以允许 CORS 请求。
任何数量的事情都可以触发飞行前请求。这些包括大多数自定义标题,以及许多内容类型,而不仅仅是一对。
您可以在这个其他答案中看到更多信息,您可以在此处阅读 MDN 上的相关信息。
您的 API 服务器将需要处理 OPTIONS 请求。您没有显示任何相关的 API 服务器代码,但如果 URL 是https://cbiapi.dailycode.tk/parse
并且服务器环境是 Express,那么您的 API 服务器中需要这样的东西:
app.options("/parse", cors(), (req, res) => {
res.sendStatus(204);
});
如果您希望部分锁定,可以将其调整为仅允许某些来源。此示例将允许所有源从浏览器进行跨源访问。
推荐阅读
- lua - 我可以让我的 Lua 程序睡一天左右吗?
- node.js - 如何让 KoaJS 端点返回有效的数据数组?
- c# - 如何访问不同类中框架的内容?WPF
- wordpress - NGINX Regex 用于自动重定向 301 所有文章使用 WordPress 自定义永久链接重写
- python - 如何将非列表循环输出放在 Python 的列表中?
- javascript - CSS边框动画在表格内占用空间,使用绝对位置时的粗略动画
- c - 将字符串数组从 C 返回到 Fortran
- regex - 如何使用正则表达式匹配直到无效响应(C#)
- python - matplotlib 颜色条的对数刻度
- javascript - 当底层数据发生变化时,是否应该在“react-d3-tree”中动态重新渲染树,即添加、删除或修改节点?