django-cors-headers no funciona

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.