web-dev-qa-db-fra.com

Structure de repos Django Python, aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée en chrome, fonctionne dans Firefox

J'ai effectué des recherches et lu plusieurs articles de Stackoverflow sur le même sujet. Aucun n'a résolu mon problème. 

Mon problème est que je reçois le message d'erreur "... aucun en-tête" ... n'est présent sur la ressource demandée ... "dans ma console.

J'utilise:

Version Chrome 57.0.2987.133 Firefox Version 52.0.2

Python 2.7 Django 1.11a1

AngularJS

J'utilise MAMP pour servir mes éléments frontaux Angular et le serveur Django pour les éléments dorsaux.

Dans mes paramètres Django, j'ai inclus le middleware cors et essayé à la fois la liste blanche et la définition de tous les éléments comme étant vrais: 

MIDDLEWARE = [

    'Django.middleware.security.SecurityMiddleware',
    'Django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    '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

J'ai toujours cette erreur sur google chrome:

localhost /: 1 XMLHttpRequest ne peut pas charger {mon URL de noeud final}. Réorienter de {mon URL de noeud final} à {mon URL de noeud final avec a} a été bloqué par stratégie CORS: Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. Origin {request url} n'est donc pas accès autorisé.

Cela fonctionne correctement sur Firefox, et je ne comprends pas pourquoi cela ne fonctionne pas pour Google Chrome. Je n'ai pas essayé d'autres types de navigateurs. Toute aide sera très appréciée, merci.

7
SPatrick

Installez le paquet cors-headers avec

pip install Django-cors-headers

Ajoute à vos applications installées

INSTALLED_APPS = (

    ...
    'corsheaders',
    ...
)

Ajoutez votre MIDDLEWARE n'oubliez pas d'ajouter comme étant le premier de la liste

MIDDLEWARE = [  

    'corsheaders.middleware.CorsMiddleware',
    'Django.middleware.common.CommonMiddleware',
    ...
]

Avant que les applications installées mettent cette configuration à la disposition de tous

CORS_Origin_ALLOW_ALL=True

Ou créez une liste de hits

CORS_Origin_WHITELIST = (

    'google.com',
    'hostname.example.com',
    'localhost:8000',
    '127.0.0.1:9000'
)
23
Clevison Luiz

Vérifiez d'abord votre url de requête. J'ai eu ce problème lors de l'utilisation de vue-resource.

4
zxt077

la raison qui est chrome parcourir; vous pouvez installer l'application CORS Toggle en chrome ou déployer votre code Web sur nginx ou Apache, puis en utilisant chrome.

0
cece

Peut-être avez-vous besoin de regarder comment vous appelez vos middlewares. S'ils ne sont pas dans le bon ordre, ils risquent de générer cette erreur. Il semble que votre 'Django.middleware.security.SecurityMiddleware' doive être placé sous le 'corsheaders.middleware.CorsMiddleware'..__ et que vous deviez peut-être aussi ajouter CORS_ALLOW_CREDENTIALS = True dans votre code.

J'espère que cela t'aides.

0
Pansul Bhatt