我正在为基于Django的应用开发Phonegap应用,但在尝试调用 AJAX 时,我收到了以下错误:
XMLHttpRequest cannot load http://domain.herokuapp.com/getcsrf/?tags=jquery%2Cjavascript&tagmode=any&format=json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
我怎样才能让我的Django应用程序允许一些网址的交叉起源?
下面是我的 AJAX 代码:
get: function() {
$.getJSON("http://domain.herokuapp.com/getcsrf/",
{
tags: "jquery,javascript",
tagmode: "any",
format: "json"
},
function(data) {
$.each(data.items, function(item){
console.log(item);
});
});
}
5条答案
按热度按时间fnvucqvd1#
默认情况下Django不提供提供交叉源所需的头文件。最简单的方法是使用这个Django应用程序来处理它:https://github.com/adamchainz/django-cors-headers
要支持允许全部,只需使用设置...
CORS_ALLOW_ALL_ORIGINS = True
,然后在中间件或视图中对请求进行任何过滤。a5g8bdjr2#
对于单个视图,您可以手动添加标题:
voase2hg3#
您可以使用“django-cors-headers”。只需使用pip安装即可:
将“corsheaders”添加到已安装的应用程序:
添加中间件:
然后将以下内容添加到您的“settings.py“:
如果您还想允许某些域发出“POST”请求,请将其添加到您的“settings.py“中,并且不要忘记将其添加到“CORS_ALLOWED_ORIGINS”中。
我希望这能解决你的问题:)
n3schb8v4#
你可以像其他人建议的那样使用django-cors-headers,在写这篇文章时,你需要遵循下面的所有步骤。
要在你的项目中使用django-cors-headers,请按照cors headers项目的README的Setup和Configuration部分中的指南操作,或者阅读下面的内容(为了方便起见,我从README中复制了这些内容)。
设置
从管道安装:
python -m pip install django-cors-headers
然后将其添加到已安装的应用程序:
请确保添加结尾逗号,否则可能会出现ModuleNotFoundError(请参见this blog post)。
您还需要添加一个中间件类来侦听响应:
CorsMiddleware
应该放在尽可能高的位置,特别是在任何可以生成响应的中间件之前,比如Django的CommonMiddleware
或Whitenoise的WhiteNoiseMiddleware
。如果不在之前,它将无法向这些响应添加CORS头。同样,如果你使用
CORS_REPLACE_HTTPS_REFERER
,它应该放在Django的CsrfViewMiddleware
之前。配置
在Django设置中配置中间件的行为。您必须至少设置以下三个设置中的一个:
CORS_ALLOWED_ORIGINS
受权发出跨网站HTTP要求的来源清单。预设值为
[]
。来源由CORS RFC第3.2节定义为URI方案+主机名+端口,或特殊值'null'或'file://'之一。默认端口(HTTPS = 443,HTTP = 80)在此处是可选的。
特殊值null由浏览器在“隐私敏感上下文”中发送,例如当客户端从file://域运行时。特殊值file://由Android上的某些Chrome版本意外发送,如this bug。
示例:
以前,此设置称为
CORS_ORIGIN_WHITELIST
,它仍然作为别名工作,新名称优先。CORS_ALLOWED_ORIGIN_REGEXES
(第一次)代表正则表达式的字符串列表,这些正则表达式与被授权进行跨站点HTTP请求的源匹配。默认值为
[]
。当CORS_ALLOWED_ORIGINS
不可行时(例如,当您有大量子域时)很有用。示例:
以前,此设置称为
CORS_ORIGIN_REGEX_WHITELIST
,它仍然作为别名工作,新名称优先。CORS_ALLOW_ALL_ORIGINS
如果为
True
,则允许所有来源。将忽略限制允许来源的其他设置。默认为False
。设置为
True
是危险的,因为它允许任何网站向您的网站发出跨源请求。通常您会希望使用CORS_ALLOWED_ORIGINS
或CORS_ALLOWED_ORIGIN_REGEXES
来限制允许的源列表。以前,此设置称为
CORS_ORIGIN_ALLOW_ALL
,它仍然作为别名工作,新名称优先。ltqd579y5#
在我的情况下,我张贴了一个文件超过1 MB,我得到这个错误,因为
nginx
配置(默认最大大小1 MB),所以......对我来说,
nginx.conf
的路径是/etc/nginx/nginx.conf
。在我的例子中,我只是在
http block
中添加了client_max_body_size
,它对我很有效确保在更改此配置后重新启动nginx