2014-10-14 1 views
0

Im новый для переполнения стека и надеюсь, что я не допущу ошибки для моего первого сообщения.Django не разрешен Access-Control-Allow-Origin

Я получаю сообщение об ошибке: Происхождение ... не разрешено доступом-контролем-разрешить-Происхождение.

Из того, что я читал в других подобных сообщениях, это проблема с перекрестным доменом. Но вот что: case1: при запуске моего локального файла html, содержащего запрос ajax на сервер A, у меня нет pb. case2: при открытии этого же типа html, на этот раз, обслуживаемый локальным сервером django B, тогда у меня есть pb.

Может ли кто-нибудь объяснить, почему case2 считается перекрестным доменом? сервер B находится на моей машине, так почему случай 2 не будет считаться таким же, как case1?

Большое спасибо

некоторый код:

Вариант 1: я достигаю сервер A на моей домашней сети через AJAX в HTML-страницы.

если построить HTML-страницы с помощью Ajax запроса, как это:

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 не имеет «заголовка происхождения», и аналогичный запрос POST имеет источник = файл: //

Этот сервер A не кодируется мной, и я не могу его изменить.

Вариант 2: Я создал сервер B веб с помощью Django. Этот веб-сервер обслуживал html-страницу с js, где присутствует такой же запрос ajax. На этот раз Ajax-запрос к серверу A отправляется, но я не могу получить ответ и браузер поднятой ошибку:

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

Я заметил, что в этом случае GET происхождение устанавливается:

> http://127.0.0.1:8000 

со вчерашнего дня я пытался играть с некоторыми промежуточного программного приложения на стороне сервера Джанго 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

спасибо Hassan за ваш интерес ... – romuduck

+0

не работает для меня. Я использую django 1.7 – rozochkin

Смежные вопросы