django에서 실행중인 bbb.com에서 json 데이터를 수신하기 위해 교차 도메인 아약스 "GET"요청을 보내는 django로 일부 사이트 aaa.com을 개발 중입니다. REST 프레임 워크를 사용합니다. 이 시점에서 모든 것은 crossDomain: true; withCredentials:true
을 추가하면 꽤 잘 작동합니다. 물론 aaa.com의 서버 측에서 구성됩니다.
...-Allow-Credentials: true; ...-Allow-Origin: bbb.com
크로스 도메인 아약스 OPTIONS 오류 403 (장고)
주요 문제는 aaa.com이 PUT POST DELETE
아약스 요청을 만들려고 할 때 온다. 는 CORS 문서에 따르면 [https://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0] 클라이언트 측 Ajax 요청이 올바른지
...-Allow-Headers, ...-Allow-Methods
가
...-Request-Headers, ...-Request-Methods
과 일치하므로,이 요청은 '단순한'모든 브라우저의 제 아니다으로부터 플라이트 요청을 보낸다 aaa.com에서 bbb.com으로 이동하여 일부 사용자 정의 헤더 및 메소드가 허용되는지 확인하십시오.
모든 것이 정상이지만 403 오류가 계속 발생합니다. 도메인 간 비행 전 요청이 쿠키를 포함 할 수 없기 때문에 불가능 사전 플라이트 요청에 쿠키를 : 그 서버를 실현
General:
Request URL:http://bbb.com/api/someapipage/
Request Method:OPTIONS
Status Code:403 Forbidden
Remote Address:some ip:80
Response Headers:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:accept, content-type, x-csrftoken, x-requested-with
Access-Control-Allow-Methods:GET, POST, OPTIONS, HEAD, PUT, DELETE
Access-Control-Allow-Origin:http://aaa.com
Allow:GET, POST, HEAD, OPTIONS
Connection:Keep-Alive
Content-Language:en
Content-Type:application/json
Date:Mon, 04 Jul 2016 14:20:38 GMT
Keep-Alive:timeout=5, max=100
Server:gunicorn/19.6.0
Transfer-Encoding:chunked
Vary:Accept,Accept-Language,Cookie
X-Frame-Options:SAMEORIGIN
Request Headers:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ru;q=0.6
Access-Control-Request-Headers:accept, content-type, x-csrftoken
Access-Control-Request-Method:POST
Connection:keep-alive
Host:aaa.com
Origin:http://aaa.com
Referer:http://aaa.com/
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
이 문제를 해결하기 위해 시도의 주 후
바리 싶어 다음은 요청/응답입니다 헤더에. 나는이 문제에 어떤 해결책을 찾기 시작하고 발견 https://code.djangoproject.com/ticket/13217"django.middleware.locale.LocaleMiddleware는 장고가가 '달라집니다 쿠키'추가하는 원인이 활성화. 헤더를 모든 reponse에" 그래서 localMiddleware는 비행 전 OPTIONS 응답에서도 Vary : Cookie 헤더를 추가합니다.
djang-cors-header
을 사용하여 이러한 문제를 해결할 것을 권장합니다. 하지만이 패키지 기능을 사용하는 것은 서버 측의 설정과 같습니다.
나는 꽤 패키지 : django-dont-vary-on
이 설치되어 있다면 Vary : 쿠키를 끄기 위해 데코레이터를 설정할 수 있지만 내 경우에는 OPTIONS 응답에서만 Vary : 쿠키를 꺼야합니다.
임 비트는 django에 새로운 것이고 실제로 이런 상황에서 무엇을해야할지 상상조차 할 수 없습니다. 내 발걸음은 광산에서 걷는 것과 같습니다. 해결책이나 대안이 있습니까?
답장을 보내 주셔서 감사합니다. 최대한 빨리 서버 측에 액세스 할 때 귀하의 솔루션을 시도합니다 –
그건 내 문제를 해결! 정말 고맙습니다! –
도움이 되었기 때문에 기쁩니다 :-) – kapilsdv