CORS: No se puede usar el comodín en Access-Control-Allow-Origin cuando el indicador de credenciales es verdadero
Tengo una configuración que involucra
Servidor frontend (Node.js, dominio: localhost: 3000) <---> Backend (Django, Ajax, dominio: localhost: 8000)
Navegador <- webapp <- Node.js (Servir la aplicación)
Navegador (aplicación web) -> Ajax -> Django (Servir solicitudes POST ajax)
Ahora, mi problema aquí es con la configuración de CORS que usa la aplicación web para hacer llamadas Ajax al servidor backend. En cromo, sigo recibiendo
No se puede usar el comodín en Access-Control-Allow-Origin cuando el indicador de credenciales es verdadero.
Tampoco funciona en Firefox.
La configuración de mi Node.js es:
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();
};
Y en Django estoy usandoeste middleware Junto con esto
La aplicación web hace peticiones como tales:
$.ajax({
type: "POST",
url: 'http://localhost:8000/blah',
data: {},
xhrFields: {
withCredentials: true
},
crossDomain: true,
dataType: 'json',
success: successHandler
});
Entonces, los encabezados de solicitud que envía la aplicación web se parecen a:
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="***"
Y aquí está el encabezado de respuesta:
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
¿A dónde me voy mal?
Edición 1: he estado usandochrome --disable-web-security
, pero ahora quiero que las cosas realmente funcionen.
Edición 2: Respuesta:
Entonces, la solución para mí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/
)