J'ai une configuration impliquant
Serveur frontal (Node.js, domaine: localhost: 3000) <---> Backend (Django, Ajax, domaine: localhost: 8000)
Navigateur <- webapp <- Node.js (servir l'application)
Navigateur (webapp) -> Ajax -> Django (Servir les requêtes POST ajax)
Maintenant, mon problème ici est avec la configuration CORS que la webapp utilise pour passer des appels Ajax au serveur principal. En chrome, je continue de
Impossible d'utiliser le caractère générique dans Access-Control-Allow-Origin lorsque l'indicateur d'informations d'identification est vrai.
ne fonctionne pas non plus sur Firefox.
Ma configuration Node.js est:
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', 'http://localhost:8000/');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
};
Et dans Django j'utilise ce middleware avec cela
La webapp fait des demandes en tant que telles:
$.ajax({
type: "POST",
url: 'http://localhost:8000/blah',
data: {},
xhrFields: {
withCredentials: true
},
crossDomain: true,
dataType: 'json',
success: successHandler
});
Ainsi, les en-têtes de demande envoyés par la webapp ressemblent à:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept"
Access-Control-Allow-Methods: 'GET,PUT,POST,DELETE'
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: csrftoken=***; sessionid="***"
Et voici l'en-tête de réponse:
Access-Control-Allow-Headers: Content-Type,*
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Content-Type: application/json
Où vais-je me tromper?!
Edit 1: J'ai utilisé chrome --disable-web-security
, mais je veux maintenant que les choses fonctionnent réellement.
Edit 2: Réponse:
Donc, solution pour moi django-cors-headers
config:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
'http://localhost:3000' # Here was the problem indeed and it has to be http://localhost:3000, not http://localhost:3000/
)
http
, c'est le /
à la fin. Je suppose qu'omettre http pourrait fonctionner, mais je n'ai pas vraiment travaillé sur ce genre de choses depuis quelques années, donc je ne sais pas vraiment ce qui fonctionne maintenant!