2014-10-14 4 views
0

새로운 기능으로 스택 오버플로가 발생하며 제 1 기 게시물에 실수를 저 지르지 않기를 바랍니다.Django는 Access-Control-Allow-Origin에서 허용하지 않습니다.

오류가 발생합니다 : 출처 ... Access-Control-Allow-Origin이 허용하지 않습니다.

다른 유사한 글에서 읽은 것으로, 크로스 도메인 문제입니다. 하지만 여기에있는 것들이 있습니다 : case1 : Ajax 쿼리를 서버 A에 포함하고있는 로컬 HTML 파일을 시작할 때 아무런 Pb도 없습니다. case2 :이 같은 종류의 html을 열 때, 이번에는 장고 로컬 서버 B가 서비스를 제공하고 나서 pb를가집니다.

누군가가 case2가 상호 도메인으로 간주되는 이유를 설명 할 수 있습니까? 서버 B가 내 시스템에 있으므로, case 2가 case1과 같은 것으로 간주되지 않는 이유는 무엇입니까?

덕분에 많은

일부 코드 :

사례 1 : 나는 HTML 페이지에서 아약스를 통해 서버 내 홈 네트워크에에 도달합니다.

이 같은 아약스 쿼리와 HTML 페이지 구축 할 경우 :

check_user_status = function(userID){ 
     url = "http://blabla/api" + userID; 
     var getting = $.get(url); 
     getting.done(function(data) { 
      status = data.result.status; 
      $("#result").append("association... " + status + "<br>"); 
      if (status!="pending"){ 
       clearInterval(timer); 
       clearTimeout(endRequest); 
       get_challenge(); 
      } 
     }); 
     } 

그때 내가 요청이 전송되는 볼 수 있고 내가 JSON 응답을 분석 할 수 있습니다. 그런 경우에 GET 쿼리에 "origin header"가없고 비슷한 POST 쿼리가 origin = file : //

이 서버 A는 코딩되지 않았으므로 변경할 수 없습니다.

사례 2 : Django를 통해 웹 서버 B을 만들었습니다. 이 웹 서버는 동일한 아약스 쿼리가있는 js와 함께 html 페이지를 제공했습니다. 이 시간 서버 A에 아약스 쿼리를 전송하지만 응답 브라우저 제기 오류 얻을 수 없습니다

> http://127.0.0.1:8000 
: 그 경우, GET 원점로 설정 한 것으로 나타났습니다

Origin http://127.0.0.1:8000 is not allowed by Access-Control-Allow-Origin 

어제 나는

그것이 감사를 명확히 희망 성공하지 ... 장고 서버 B의 측면에서 미들웨어 애플리케이션과 재생하려고하기 때문에 다시

+0

포스트 귀하의 코드 –

답변

1

샘플 요청 :

$.ajax({ 
     url: "http://localhost:8080", 
     type: "POST", 
     crossDomain: true, 
     accept: "application/json", 
     contentType: "application/json; charset=UTF-8", 
     data: JSON.stringify(jsonObject), 
     dataType: "json", 
     success: function (response) { 
      var resp = JSON.parse(response) 
      alert(resp.status); 
     }, 
     error: function (xhr, status) { 
      alert(status); 
     } 
    }); 

샘플 응답 : 관심을

import web 
import json 

class index: 

    def OPTIONS(self): 
     web.header('Content-Type', 'application/json') 
     web.header('Access-Control-Allow-Origin', '*') 
     web.header('Access-Control-Allow-Methods', 'POST, GET') 
     web.header('Access-Control-Allow-Headers', 'origin, x-csrftoken, content-type, accept') 
     return web.data() 

    def POST(self): 
     web.header('Content-Type', 'application/json') 
     web.header('Access-Control-Allow-Origin', '*') 


     return json.dumps('{"status" : "success"}') 

    def GET(self): 
     return json.dumps("{status : 'success'}") 
+0

감사 하산 ... – romuduck

+0

나를 위해 작동하지 않습니다. 나는 장고 1.7을 사용한다. – rozochkin

관련 문제