django-cors-headers no funciona
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.gis', 'corsheaders', 'rest_framework', 'world', 'userManager', 'markPost', 'BasicServices', ) MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = True
Todo es normal, pero no funcionó.
aquí mis cabeceras de respuesta
Cache-Control: max-age=0 Content-Type: text/html; charset=utf-8 Date: Tue, 20 Jan 2015 13:16:17 GMT Expires: Tue, 20 Jan 2015 13:16:17 GMT Last-Modified: Tue, 20 Jan 2015 13:16:17 GMT Server: WSGIServer/0.1 Python/2.7.8 Set-Cookie: csrftoken=snXksqpljbCLW0eZ0EElFxKbiUkYIvK0; expires=Tue, 19-Jan-2016 13:16:17 GMT; Max-Age=31449600; Path=/ Vary: Cookie X-Frame-Options: SAMEORIGIN
De acuerdo con el código process_response de CorsMiddleware :
response[ACCESS_CONTROL_ALLOW_ORIGIN] = "*" if ( settings.CORS_ORIGIN_ALLOW_ALL and not settings.CORS_ALLOW_CREDENTIALS) else origin
Debes establecer configuraciones como esta:
# CORS Config CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = False
Supongo que los corsheaders y los middlewares de clickjacking no son compatibles. Al menos me django.middleware.clickjacking.XFrameOptionsMiddleware
encabezado de X-Frame-Options cuando comenté django.middleware.clickjacking.XFrameOptionsMiddleware
.
Acabo de CORS_ORIGIN_ALLOW_ALL = True
configuración CORS_ORIGIN_ALLOW_ALL = True
.
Si está probando esto, debe asegurarse de incluir al menos el encabezado de Origen en la solicitud.
P.ej:
$ http GET http://127.0.0.1:8000/todos/ Origin:http://www.someorigin.com HTTP/1.0 200 OK Access-Control-Allow-Origin: * Allow: GET, POST, HEAD, OPTIONS Content-Type: application/json Date: Sat, 14 Nov 2015 04:42:38 GMT Server: WSGIServer/0.1 Python/2.7.10 Vary: Accept, Cookie X-Frame-Options: SAMEORIGIN
Obtendrá más comentarios con una solicitud de verificación previa de CORS:
$ http OPTIONS http://127.0.0.1:8000/todos/ Origin:http://www.someorigin.com HTTP/1.0 200 OK Access-Control-Allow-Headers: x-requested-with, content-type, accept, origin, authorization, x-csrftoken, user-agent, accept-encoding Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS Access-Control-Allow-Origin: * Access-Control-Max-Age: 86400 Allow: GET, POST, HEAD, OPTIONS Content-Type: application/json Date: Sat, 14 Nov 2015 04:45:37 GMT Server: WSGIServer/0.1 Python/2.7.10 Vary: Accept, Cookie X-Frame-Options: SAMEORIGIN
No olvides añadir
‘corsheaders.middleware.CorsMiddleware’,
en la parte superior de la variable MIDDLEWARS:
Ver documentos:
CorsMiddleware debe colocarse lo más alto posible, especialmente antes de cualquier middleware que pueda generar respuestas como CommonMiddleware de Django o WhiteNoiseMiddleware de Whitenoise. Si no lo está antes, no podrá agregar los encabezados CORS a estas respuestas.
Desde Django 2, MIDDLEWARE_CLASSES se cambia a MIDDLEWARE. En este caso, si tiene Django 2, asegúrese de que MIDDLWARE sea como debe ser para que MIDDLEWARES se ejecute.