Проблемы CORS после добавления поля headers в axios при выполнении GET-запроса
Я использую Django REST для моего API / Back end.
Вот мой код на python:
INSTALLED_APPS = [
...
"rest_framework",
"corsheaders",
...
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
#'corsheaders.middleware.CorsPostCsrfMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ALLOWED_ORIGINS = [
"http://localhost:3000",
"http://127.0.0.1:3000"
]
CORS_ORIGIN_WHITELIST = [
"http://localhost:3000",
"http://127.0.0.1:3000"
]
На моем фронт-энде React JS:
listItems = async () =>{
let fetchedItems = await axios.get("http://localhost:8000/api/shipments/list/", {headers: {accessToken: this.props.token, "Access-Control-Allow-Headers" : '*'}});
}
Я не получал никаких ошибок CORS, когда у меня был listItems без части заголовков:
listItems = async () =>{
let fetchedItems = await axios.get("http://localhost:8000/api/items/list/"});
}
Однако мне нужно передать accessToken в заголовке запроса.
Вот ошибка, которую я получаю:
Доступ к XMLHttpRequest по адресу 'http://localhost:8000/api/items/list/' из origin 'http://localhost:3000' был заблокирован политикой CORS: Поле заголовка запроса accesstoken не разрешено Access-Control-Allow-Headers в префлайт-ответе.
Какова причина возникновения таких проблем с CORS, какой лучший способ исправить это?
Значит, проблема может быть вызвана промежуточным ПО, которое вы прокомментировали.
А в примере, который вы прислали, нет никаких признаков INSTALLED_APPS
INSTALLED_APPS
должна быть такой
INSTALLED_APPS = [
...
"rest_framework",
"corsheaders",
...
]
Если ваша единственная цель - тестирование (не в производстве), вы можете добавить CORS_ORIGIN_ALLOW_ALL = True
в файл settings.py.
Для будущих читателей, чтобы решить проблемы CORS с Django / Django REST.
в вашем файле settings.py добавьте:
CORS_ALLOW_HEADERS = [
"name of the thing you are passing in the header",
"Access-Control-Allow-Headers",
"name of the thing you are passing in the header (all lower cased)",
]
В моем случае проблему решило следующее:
CORS_ALLOW_HEADERS = [
"accessToken",
"Access-Control-Allow-Headers",
"accesstoken",
]