javascript - 如何修复“评估已被 CORS 政策阻止:反应中没有“访问控制允许来源”
问题描述
我有一个带有反应前端和 django 后端的 Web 应用程序。来自后端的一些 API 被 cors 策略阻止,而其他 API 则没有。例如,获取博客文章的 API
const res = await axios.get(`${process.env.REACT_APP_API_URL}/blog/posts`)
正在返回数据,但单个文章的 APIconst res = await axios.get(`${process.env.REACT_APP_API_URL}/blog/${slug}`);
被阻止。注册和登录 API 也被阻止。我已将域添加到 settings.py 中允许的 url 列表中,但这并没有解决问题。我在详细信息页面中遇到的错误是:
undefined:1 Access to XMLHttpRequest at 'https://.api.example.co/blog/undefined' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
设置.py
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
CORS_ORIGIN_ALLOW_ALL = False
CORS_ALLOWED_CREDENTIALS = True
CORS_ALLOWED_ORIGINS = [
'http://127.0.0.1:8000',
'http://localhost:3000',
'https://example.co',
]
CORS_ORIGIN_WHITELIST = [
'http://127.0.0.1:8000',
'http://localhost:3000',
'https://example.co',
]
CORS_ALLOW_HEADERS = [
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
]
CORS_REPLACE_HTTPS_REFFERER = True
当我使用 Postman 测试 API 时,一切正常。但是在反应应用程序中,只有列出返回数据的帖子或项目的 API,其他的被阻止。为什么会出现这种行为,我该如何解决?
解决方案
这个问题有两个部分。1.有什么问题?2.你怎样才能完全或目前解决这个问题?我认为您的问题来自您的后端 api,它没有添加您的主机以允许 Host 在他们的代码中。当您运行项目时,系统上创建的虚拟主机会从虚拟服务器调用您的 Api,这就是您的请求从运行项目失败并从邮递员传递的原因。实际上,更改可以允许来自其他来源的后端代码或 Web 服务器设置可以解决您的问题。但是,如果您不访问您的后端团队并且您想自己解决您的问题,您可以添加您的浏览器核心标头扩展,它可以传递您对测试用例的请求。最后,我为您的 chrome 浏览器提供了很好的扩展。 https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf?hl=en
推荐阅读
- java - 使用 Jackson 数据格式 XML 到 Java 对象的 XML
- javascript - 检查 React 中的对象数组中是否存在相同的值
- spring-boot - Spring是否使“调用自己的控制器”多线程?
- c++ - 将右值作为右值转发是用例吗?
- c# - Dockerizing aspnetcore-react 模板失败
- ios - 图像帧的 iOS 动画在 Swift 中的设备方向上没有得到正确的坐标
- json - 在 Unity 中,使用 UnityWebRequest,我无法打印我想要的对象的主体
- curl - 将 curl 转换为 wget
- python - Django ListView:根据所选用户过滤历史记录
- excel - VBA 中的 INDEX(MATCH, MATCH)(类型 13 类型不匹配)