2015-01-20 11 views
10

django-Cors-headers nie działaćdjango-Cors-headers nie działać

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 

wszystko jest normalne, ale nie działa

tutaj moje nagłówki odpowiedzi

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

Jak myślisz, że nagłówki CORS nie działają? Czy możesz mi wyjaśnić? – Tommy

+0

Niektóre błędy 500 wystąpiły wcześniej niż oprogramowanie pośrednie CORS, więc nie ma szans na dodanie nagłówków CORS. Jeśli kod stanu odpowiedzi wynosił 500, może to być problem, a CORS może działać poprawnie. –

Odpowiedz

6

Według kod_odpowiedzi procesu z CorsMiddleware:

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

Musisz skonfigurować ustawienia tak:

# CORS Config 
CORS_ORIGIN_ALLOW_ALL = True 
CORS_ALLOW_CREDENTIALS = False 
+0

#awesome #django #serverspeak –

4

Chyba corsheaders i middleware clickjacking nie są kompatybilne. Przynajmniej pozbyłem się nagłówka Opcje X-Frame, gdy skomentowałem django.middleware.clickjacking.XFrameOptionsMiddleware.

Mam tylko ustawienie CORS_ORIGIN_ALLOW_ALL = True.

2

Jeśli to testujesz, upewnij się, że w żądaniu uwzględniono przynajmniej nagłówek Origin.

Np

$ 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 

Dostaniesz więcej opinii o prefligtu życzenie 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 
0

Nie zapomnij dodać

'corsheaders.middleware.CorsMiddleware',

u góry MIDDLEWARS zmiennej:

zobacz Dokumenty:

CorsMiddleware powinny być umieszczone możliwie jak najwyżej, zwłaszcza przed żadnej pośredniej, który może generować odpowiedź jak Django CommonMiddleware lub whitenoise w WhiteNoiseMiddleware. Jeśli nie jest to wcześniej dostępne, nie będzie można dodać nagłówków CORS do tych odpowiedzi .

Powiązane problemy