在Django中启用CORS(跨源请求)
Enabling CORS (Cross Origin Request) in Django
我正在尝试利用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.2
、DRF 3.4.7
和python 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。
- node.js请求数据事件未在CORS ajax调用中触发
- 向localhost发出带有grunt的代理CORS请求
- Node.js cors请求-异步示例不起作用
- HTTP请求使用cURL,但在浏览器中使用javascript时会得到CORS响应
- 是 CORS 请求,预检耗时
- Elasticsearch https cors已启用,但仍获得No'访问控制允许来源'标头存在于请求的
- Pingfederate opentoken模块CORS请求返回302,而不是200
- ajax请求出现CORS错误
- 浏览器不发送 CORS HTTP 选项用于发布请求
- 在JQuery中启用CORS后,CORS请求被阻止
- 从CORS请求中捕获异步异常
- CORS预检请求错误无法通过安装npm cors软件包解决
- sailsjs cors 糟糕的请求仍然通过控制器
- CORS AJAX 请求 Chrome 中的本地 WSGI 服务器时延迟过长
- 是否可以对从没有 CORS 的 iframe 发出的 POST 请求做出反应
- 无法在 jquery 中获取 Ajax CORS 请求以工作
- 将 CORS 请求发布到运行 sailsjs 的 HTTPS 域
- 授权标头仅在 AJAX CORS 请求中追加一次
- 使用.getJSON获取Play Store应用程序详细信息时,获取跨来源块请求[CORS]错误
- 不允许获取补丁请求 (CORS)