访问被 CORS 标头阻止

Posted

技术标签:

【中文标题】访问被 CORS 标头阻止【英文标题】:Access blocked by CORS headers 【发布时间】:2019-10-04 15:57:29 【问题描述】:

我正在使用 Django 开发一个项目,该项目通过 API 通过 React 前端上的 Django Rest Framework 提供数据。 Browsable API 工作正常,但是,react 前端在控制台中出现错误。

我已经成功安装了 django-cors-headers。

import './App.css';

  class App extends Component 
      state = 
        products: []
      ;

      async componentDidMount() 
        try 
          const res = await fetch('http://127.0.0.1:8000/products/');
          const products = await res.json();
          this.setState(
            products
          );
         catch (e) 
          console.log(e);
        
      

      render() 
        return (
          <div>
            this.state.products.map(products => (
              <div key=products.id>
                <h1>products.prodName</h1>
                <span>products.description</span>
              </div>
            ))
          </div>
        );
      
    

    export default App;

CORS 策略已阻止从源“http://localhost:3000”获取“http://127.0.0.1:8000/products/”的访问权限:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明的响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。

【问题讨论】:

你已经在INSTALLED_APPS添加了它并添加了CorsMiddleware? 我已经分别添加了它们 cros 也必须从 api 端允许 @BillySomers 看看Trying to use fetch and pass in mode: no-cors 【参考方案1】:

这些是要检查的参数: 1.在MIDDLEWARE中添加这一行(setting.py)

'corsheaders.middleware.CorsMiddleware',
    确保你有这个:
CORS_ORIGIN_WHITELIST = (
   'localhost:3000/'
)
    也检查一下:
CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
)

您的设置文件 (setting.py) 中的所有这些参数

    你写 fetch('http://127.0.0.1:8000/products/') 所以在你的 url.py 中确保反斜杠:
path('products/', views.products,name='products')

【讨论】:

以上是关于访问被 CORS 标头阻止的主要内容,如果未能解决你的问题,请参考以下文章

被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

从源“http://localhost:8080/”访问“https://xxx”被 CORS 策略阻止(不存在“Access-Control-Allow-Origin”标头)错误

访问被 CORS 阻止的 XMLHttpRequest,请求的资源上不存在“Access-Control-Allow-Origin”标头,仅用于 PUT 和 DELETE API

本地主机已被 cors 策略请求标头字段内容类型阻止访问控制不允许

尽管配置了正确的 CORS 标头,但 301 响应“跨源请求被阻止”

“访问 XMLHttpRequest 已被 CORS 策略阻止”即使我已允许所有源/标头/方法