我正在尝试使用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应用)中的任何配置。请指导我。预先感谢
答案 0 :(得分:1)
此错误应该与Access-Control-Allow-Origin
设置有关。
CORS_ORIGIN_ALLOW_ALL = True
肯定会引起问题。(请检查以下链接)
因此,除了localhost:8001
之外,还尝试将http://127.0.0.1:8001
列入白名单,这可能会解决此问题。浏览器将localhost
和127.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的值以授予对客户端加载源的访问权限。