"Нет заголовка" Access-Control-Allow-Origin "присутствует на запрошенном ресурсе" в django
Я новичок в django и использую его в качестве задней части для приложения, которое создает пользователей. На лицевой стороне кода для отправки имени пользователя:
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('POST', "http://www.local:8000/create_user/", true);
xobj.setRequestHeader("Access-Control-Allow-Origin", "*");
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
console.log(xobj.responseText);
}
}
xobj.send(json);
На задней части функция, связанная с url, обрабатывает json, но я получаю ошибку
Заголовок "Нет" Access-Control-Allow-Origin присутствует на запрошенном ресурсе. Поэтому "http://www.local:54521" не разрешен доступ".
Каково решение этой проблемы?
Также я выполнил шаги из https://gist.github.com/strogonoff/1369619, но проблема не устранена.
Ответы
Ответ 1
Ваш передний и задний разъемы находятся на разных портах, что означает, что ваши запросы ajax могут быть защищены от перекрестного происхождения.
Вам нужно настроить задний конец, чтобы принимать запросы с разных источников (или только разные номера портов).
Попробуйте прочитать CORS и более конкретно посмотреть заголовки django cors
Ответ 2
Вот что я сделал, когда получил ту же ошибку от Django Rest Framework при отправке запроса API от Restangular.
Это добавляет заголовки CORS (Cross-Origin Resource Sharing) к ответам от Django Rest Framework. Отсутствие заголовков CORS стало причиной ошибки.
В корневой папке проекта Django (где находится файл manage.py) выполните:
pip install django-cors-headers
Я попробовал его с помощью virtualenv, но не смог заставить его работать, поэтому я установил его, не переключаясь на virtualenv, и установил его.
После его установки вы должны внести некоторые изменения в настройки django.py
INSTALLED_APPS = (
...
'corsheaders',
...
)
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
)
CORS_ORIGIN_ALLOW_ALL = True
Значение выше true позволяет принимать все источники.
Рекомендации: https://github.com/ottoyiu/django-cors-headers
Ответ 3
В моем случае я просто забыл добавить конечную косую черту в конце URL-адреса API REST. т.е.
У меня было это:
http://127.0.0.1:8000/rest-auth/login
Вместо этого:
http://127.0.0.1:8000/rest-auth/login/
Ответ 4
Если django-cors-headers
не удалось устранить проблему, попробуйте вручную добавить Access-Control-Allow-Origin
следующим образом:
@api_view(['GET'])
def swanger(request):
resutl = {'a': 1}
resp = JsonResponse(resutl)
resp['Access-Control-Allow-Origin'] = '*'
return resp
Ответ 5
в моем случае это был localhost: 8000, в то время как ожидалось 127.0.0.1... смена localhost на 127.0.0.1 в моем браузере сделала свое дело
Ответ 6
Добавьте следующую строку в классы промежуточного программного обеспечения
'corsheaders.middleware.CorsPostCsrfMiddleware'
так что общая реализация будет:
INSTALLED_APPS = (
...
'corsheaders',
...
)
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'corsheaders.middleware.CorsPostCsrfMiddleware'
...
)
CORS_ORIGIN_ALLOW_ALL = True
проверьте документацию ниже для получения дополнительной информации
Ответ 7
Я столкнулся с той же проблемой.
user3785412 ответ будет работать. но в первый раз он может не работать напрямую из-за кэша браузера. попробуйте в другом браузере или очистить кеш, прежде чем терять надежду.
У меня был сервер API в Django 2, размещенный на Heroku и Angular 7 Client на Firebase.
Я внес все изменения в settings.py в соответствии с user3785412 и все равно он не будет работать, потратил почти 3 часа. Потом наткнулся на пост, в котором предполагалось, что кеш может быть проблемой. открыл в хроме и вуаля!
Надеюсь это поможет! (Мой первый ответ здесь, пожалуйста, будьте спокойны)