如果CORS标头“ Access-Control-Allow-Origin”为“ *”且CORS请求未成功,则不支持凭据

时间:2018-11-28 09:00:33

标签: api http django-rest-framework cors

我正在尝试使用Django应用程序在angularjs中获取api数据。当我尝试访问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应用)中的任何配置。请指导我。预先感谢

1 个答案:

答案 0 :(得分: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的值,该值不允许使用凭据。 / p>      

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

     

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

     

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

     

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

     

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