【问题标题】:Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘*’ and CORS request did not succeed如果 CORS 标头“Access-Control-Allow-Origin”为“*”且 CORS 请求未成功,则不支持凭据
【发布时间】:2019-04-30 03:14:04
【问题描述】:

我正在尝试使用 django 应用程序在 angularjs 中获取 api-data。当我尝试访问 api 时出现错误 - 如果 CORS 标头“Access-Control-Allow-Origin”为“*”且 CORS 请求未成功,则不支持凭据。 API 托管在单独的 django 应用程序中。

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

    'rest_framework',
    'Bigflow.API',
    'rest_framework.authtoken',
    '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_ORIGIN_ALLOW_ALL = True  # i teried false using CORS_ORIGIN_WHITELIST = (
    'localhost:8001',
)
    CORS_ALLOW_CREDENTIALS = True # i tried both false and true

我的 js

 this.api = function () {
 var response =    $http.get("http://127.0.0.1:8000/Schedule_Master?Entity_gid=1&Action=FOLLOWUP_REASON&Schedule_Type_gid=1",{headers: {
        'Authorization': 'Token 7111*******************',
        'Accept': 'application/json',
        'Access-Control-Allow-Origin':'*'

    }})
    return response;
    }

我尝试了许多来自 stackoverflow 的解决方案。我无法解决我的问题,或者我想更改我的 api 托管服务器(Django 应用程序)中的任何配置。请指导我。在此先感谢

【问题讨论】:

    标签: api http django-rest-framework cors


    【解决方案1】:

    这个错误应该是关于Access-Control-Allow-Origin设置的。

    CORS_ORIGIN_ALLOW_ALL = True 肯定会导致问题。(查看以下链接)

    所以除了localhost:8001之外,尽量把http://127.0.0.1:8001也加入白名单,或许可以解决这个问题。浏览器将localhost127.0.0.1 视为不同的域。

    Reason: Credential is not supported if the CORS header ‘Access-Control-Allow-Origin’ is ‘*’

    尝试使用设置了凭据标志的 CORS 请求,但服务器使用通配符 ("*") 作为 Access-Control-Allow-Origin 的值进行配置,这不允许使用凭据。

    要在客户端更正此问题,只需确保在发出 CORS 请求时凭据标志的值为 false。

    如果使用 XMLHttpRequest 发出请求,请确保您没有将 withCredentials 设置为 true。

    如果使用服务器发送的事件,请确保 EventSource.withCredentials 为 false(这是默认值)。

    如果使用 Fetch API,请确保 Request.credentials 为“省略”。

    如果您需要调整服务器的行为,则需要更改 Access-Control-Allow-Origin 的值以授予对加载客户端的来源的访问权限。

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 2020-01-13
      • 2021-12-19
      • 2021-12-02
      • 2019-06-19
      • 2018-09-19
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      相关资源
      最近更新 更多