2015-01-20 6 views
10

django-cors-Header arbeiten nichtdjango-cors-Header arbeiten nicht

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 

Alles ist normal, aber nicht

hier Header meine Antwort

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 
+0

Wie sagen Sie CORS Header funktioniert nicht? Kannst du mir das erklären? – Tommy

+0

Einige 500 Fehler passieren früher als die CORS-Middleware, daher besteht keine Möglichkeit, CORS-Header hinzuzufügen. Wenn der Antwortstatuscode 500 lautet, könnte dies das Problem sein und CORS funktioniert möglicherweise einwandfrei. –

Antwort

6

Nach der funktionierten Prozessantwortcode von CorsMiddleware:

response[ACCESS_CONTROL_ALLOW_ORIGIN] = "*" if (
      settings.CORS_ORIGIN_ALLOW_ALL and 
      not settings.CORS_ALLOW_CREDENTIALS) else origin 

Sie müssen Einstellungen wie folgt festgelegt:

# CORS Config 
CORS_ORIGIN_ALLOW_ALL = True 
CORS_ALLOW_CREDENTIALS = False 
+0

#wunderschön #django #serverspeak –

4

Ich denke, corsheaders und Clickjacking Middle sind nicht kompatibel. Zumindest habe ich den X-Frame-Options-Header losgeworden, als ich django.middleware.clickjacking.XFrameOptionsMiddleware auskommentiert habe.

Ich habe nur CORS_ORIGIN_ALLOW_ALL = True Einstellung.

2

Wenn Sie dies testen, müssen Sie sicherstellen, dass Sie mindestens den Origin-Header in die Anfrage aufnehmen.

ZB:

$ 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 

Sie mehr Feedback mit einem Preflight CORS Anfrage erhalten:

$ 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 
0

Vergessen Sie nicht,

'corsheaders.middleware.CorsMiddleware' hinzuzufügen,

an der Spitze der MIDDLEWARS Variable:

Siehe docs:

CorsMiddleware so hoch wie möglich platziert werden soll, vor allem vor jede Middleware, die Antworten wie Djangos CommonMiddleware oder Whitenoise des WhiteNoiseMiddleware erzeugen kann. Wenn es nicht vorher ist, wird es nicht möglich sein, die CORS-Header zu diesen Antworten hinzuzufügen.