Access-Control-Allow-Origin不允许Django

时间:2014-10-14 22:50:25

标签: xmlhttprequest cors

我是堆叠溢出的新手,希望我在第一篇文章中不会犯任何错误。

我收到错误: Access-Control-Allow-Origin不允许使用Origin ..

从我在其他类似帖子中看到的内容来看,它是一个跨域问题。 但事情是这样的: case1:当启动我的本地html文件,包含ajax查询到服务器A时,我没有pb。 case2:当打开这个相同类型的html时,这次由django本地服务器B服务,然后我有一个pb。

有人能解释为什么case2被视为跨域? 服务器B在我的机器上,为什么案例2不会被认为与case1相同?

非常感谢

部分代码:

案例1 :我通过html页面中的ajax在我的家庭网络上访问服务器A

如果我用这样的ajax查询构建一个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查询没有&#34;起源标题&#34;类似的POST查询有origin = file://

此服务器A未由我编码,我无法更改。

案例2:我通过Django创建了 Web服务器B 。此Web服务器提供了一个带有js的html页面,其中存在相同的ajax查询。 这次发送到服务器A的ajax查询但是我无法获得响应并且浏览器引发了错误:

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

我注意到在这种情况下,GET原点设置为:

> http://127.0.0.1:8000

从昨天开始,我尝试在django服务器B端玩一些中间件应用程序......但没有成功

希望它澄清一下 再次感谢

1 个答案:

答案 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'}")