Javascript CORS标头不适用于Django项目

Javascript CORS标头不适用于Django项目,javascript,python,ajax,django,iframe,Javascript,Python,Ajax,Django,Iframe,我在另一个网站上有一个iframe。我可以控制iframe的代码,但不能控制网站本身,而且它的来源不是我的网站(它是从另一个域加载的)。在iframe中,对其他网站进行了几个ajaxapi调用,并对我自己的基于Django的网站发出了一个GET请求。但是,此调用返回错误,代码为0。请求甚至没有登录到网络浏览器选项卡(我使用Firefox) 在Django网站上运行同样的方法效果很好,所以很明显问题出在跨源请求上。我添加并启用了django-cors-headers模块,但它仍然不起作用。抛出相同

我在另一个网站上有一个iframe。我可以控制iframe的代码,但不能控制网站本身,而且它的来源不是我的网站(它是从另一个域加载的)。在iframe中,对其他网站进行了几个ajaxapi调用,并对我自己的基于Django的网站发出了一个GET请求。但是,此调用返回错误,代码为0。请求甚至没有登录到网络浏览器选项卡(我使用Firefox)

在Django网站上运行同样的方法效果很好,所以很明显问题出在跨源请求上。我添加并启用了
django-cors-headers
模块,但它仍然不起作用。抛出相同的错误,但实际上什么也没有发生

我的Django版本是1.10.5。通过pip为Python3.5安装的模块。整个过程都在VPS上运行。设置:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'install',
    'account',
    'corsheaders',
]
MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL = True
CSRF_TRUSTED_ORIGINS = (
    'https://widget.insales.ru',
)
请求:

$.ajax({
    type: "GET",
    url: "http://project_url/scripty",
    data: {
      "data": JSON.stringify(r)
    },
    dataType: 'text/plain',
    success: function(data){
      console.log(JSON.stringify(r));
      console.log("Success!");
      console.log(data);
    },
    error: function(xhr, status, errorThrown){
      console.log(JSON.stringify(r));
      console.log("Status: " + status + "\nThrown: " + errorThrown);
      console.log(xhr);
    }
  });
不确定要添加什么,请在评论中询问


我做错了什么,还是因为我对事物的理解?

这是中间件的原因

'django.middleware.clickjacking.XFrameOptionsMiddleware',
Django不允许将Django网站用作Iframe标记。因为django有中间件

'django.middleware.clickjacking.XFrameOptionsMiddleware',
不允许使用iframe标记将django站点加载到另一个网站。它在加载页面时检查SAMEORIGIN。阅读有关此主题的全部内容

可以在iframe中使用decorator来渲染特定视图

from django.views.decorators.clickjacking import xframe_options_exempt

  @xframe_options_exempt
  def ok_to_load_in_a_frame(request):

这个问题出乎意料地很容易解决了。过了很长一段时间,我终于尝试从Chrome发出同样的请求,并且看到我一直在尝试从secure调用一个不安全的资源。这意味着iframe是用https加载的,请求是用http发出的。为请求的站点激活SSL解决了问题。

有一点我忘了提。此iframe的来源不是我的网站。我可以控制它,但它是从另一个域加载的。我会编辑这个问题,如果你想在iframe标签中向另一个域显示你的django网站,请使用decorator或remove中间件。不,你不明白。假设我的站点名为a.com。我使用一个特殊的工具将我的代码上传到域b.com,b.com在从widget.b.com加载的iframe中显示它。所以基本上我需要从widget.b.com向a.com发出请求,但我不能。Django与iframe无关。让我知道你想告诉我的话我明白了吗?我评论说,中间件,它不能帮助您在widget.b.com的iframe标记中显示b.com。正确的?