在Django中启用CORS(跨源请求)

Enabling CORS (Cross Origin Request) in Django

本文关键字:请求 CORS Django 启用      更新时间:2023-09-26

我正在尝试利用API立交桥http://wiki.openstreetmap.org/wiki/Overpass_API在Django上运行的项目中使用JavaScriptXMLHttpRequest,但我一直得到

 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://www.google.com/accounts/ClientLogin. (Reason: CORS header 'Access-Control-Allow-Origin' missing). 

错误。无论我是使用get还是POST,以及从任何其他主机,而不仅仅是天桥API,我都会收到这个错误。

我已经安装了django-cors标头https://github.com/ottoyiu/django-cors-headers并按照那里的说明,将"corsheaders"放入INSTALLED_APPS,将"corsheaders.middleware.CorsMiddleware"、"django.middleware.common.CommonMiddleware"放入middleware_APPS,我已经设置了

CORS_ORIGIN_ALLOW_ALL = true 

在环境中。py,但似乎什么都不起作用。我用在本地运行

python manage.py runserver

但我也在openshift上主持。这两项工作都没有,都给出了上面的错误。

如果我遗漏了什么,请告诉我。

我在尝试从笔记本电脑(localhost)访问托管在Heroku的Django Rest Framework API时遇到了同样的问题。我使用的是Django 1.10.2DRF 3.4.7python v3.4

我做了pip install django-cors-headers(1.2.2版),并按照文档所说的进行了配置,然后,同样的错误再次出现:(

继续搜索几个小时,然后它击中了我!

我执行了pip install django-cors-middleware(1.3.1版)而没有卸载django-cors-headers软件包。此外,我在settings.py文件中没有碰任何东西(它被配置为django-cors-headers设置,尽管这两个包没有太多区别——后者是第一个包的分支)。

点击刷新(来自localhost),一切都很顺利!

我现在可以通过jQuery的ajax方法从myapp.herokuapp.com获取数据了。

记得把'corsheeader.middleware.CorsMiddleware'放在列表的顶部,还有'django.middleware.common.CommonMiddleware'已经是标准的中间件

MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
 ]

CORS_ORIGIN_ALLOW_ALL=真

应该是:

CORS_ORIGIN_ALLOW_ALL=真

T表示True的大写字母。添加额外的所需中间件

MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', ]

并将"corstheaders"注册到INSTALLED_APPS。