【问题标题】:How to enable CORS in Reactjs?如何在 Reactjs 中启用 CORS?
【发布时间】:2019-02-23 16:42:42
【问题描述】:

我在 React.js 中使用这个 fetchData 配置:

fetchData = () => {
      fetch("http://localhost:8000/batch_predict", {
        method: "POST",
        headers: {
          'Accept': 'application/json, text/plain, */*',
            //'Content-Type': 'application/json'
          "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" // otherwise $_POST is empty
        },
      ,
    body: JSON.stringify({
      holdingTime: this.state.holdingTime,
      csvData: this.state.csvData
    })
  })
  .then((resp) => {
    return resp.json()
  })
  .then((data) => {
    this.updateDelay(data.prediction)
  })
  .catch((error) => {
    console.log(error, "catch the hoop")
  })

};

它可以很好地发送数据,但是出现 CORS 错误。

如果我设置标题如下,我不会得到CORS错误,但是数据设置错误:

 headers: {
    "Content-Type": "application/json; charset=utf-8",
 }

因此我想保留第一个选项,但是在这种情况下如何启用 CORS?

在 Django 后端 settings.py 我添加了所有与 CORS 相关的行:

ALLOWED_HOSTS = ["*"]


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

【问题讨论】:

  • 尝试使用application/jsonp 而不是application/json——我认为这也可以让你绕过CORS。
  • 在附加的 settings.py 中我看不到为 CORS 添加的任何内容,你能指定你添加的内容吗?

标签: javascript python django reactjs


【解决方案1】:

在 OPTION 请求中,服务器应表明它实际上允许跨站点请求,但希望发送凭据。这是由 Access-Control-Allow-Credentials: true 响应标头完成的,可以使用 djang-cors-headers 包进行设置。

pip3 install django-cors-headers

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'corsheaders',
]
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ALLOW_CREDENTIALS = True

CORS_ORIGIN_WHITELIST = (
    'localhost:3000',
)

参考:https://medium.com/@zoltankohalmy/react-and-django-57f949b0f012

【讨论】:

  • 什么是myapp
  • 这只是为了向您展示示例。它应该是你的应用程序。但是您应该在已安装的应用程序中有corsheaders
猜你喜欢
  • 2020-03-04
  • 2021-02-21
  • 2014-07-29
  • 2015-05-27
  • 2020-11-24
  • 2018-10-19
  • 2021-04-14
  • 2019-08-16
相关资源
最近更新 更多