django 之跨域访问问题解决 access-control-allow-origin

1产生跨域问题的原因

跨域问题是浏览器同源策略限制,当前域名的js只能读取同域下的窗口属性。

2跨域问题产生的场景

当要在在页面中使用js获取其他网站的数据时,就会产生跨域问题,比如在网站中使用ajax请求其他网站的天气、快递或者其他数据接口时以及hybrid app中请求数据,浏览器就会提示以下错误。这种场景下就要解决js的跨域问题。

XMLHttpRequest cannot load http://你请求的域名. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://当前页的域名' is therefore not allowed access. 哪些情况会产生跨域问题 一个网站的网址组成包括协议名,子域名,主域名,端口号。比如 https://github.com/,其中https是协议名,www是子域名,github是主域名,端口号是80,当在在页面中从一个url请求数据时,如果这个url的协议名、子域名、主域名、端口号任意一个有一个不同,就会产生跨域问题。 即使是在 http://localhost:80/ 页面请求 http://127.0.0.1:80/ 也会有跨域问题

3解决跨域问题

有很多种方法,大体上分前台解决方案和后台解决方案。 前台可以设置ajax的type为jsonp(注意,jsonp != json) 现在介绍Django后台的解决方案,特别简单。其他的,也有自己的解决方案,网上一搜一箩筐,不过,由于没有时间去尝试,需要你自己甄别了。下面仅仅介绍Django的解决方案。

3-1 安装

pip install django-cors-header

如果报上面的问题,说明站点不可用

再上述命令后,加上 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 即可。

这是我选取的一个可用的站点。

3-2设置settiing.py

增加APPS

INSTALLED_APPS = (
...
'corsheaders'
)

设置中间键

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)

增加前三个。注意,corsheaders.middleware.CorsMiddleware一定要在django.middleware.common.CommonMiddleware之前。

不用重启,就实时生效了。Django支持热加载。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

马国俊的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯IVWEB团队的专栏

Web 推送技术

伴随着今年 Google I/O 大会的召开,一个很火的概念--Progressive Web Apps 诞生了。这代表着我们 web 端有了和原生 APP 媲...

1.4K0
来自专栏云计算教程系列

如何在Ubuntu 16.04上使用Vault来保护敏感的Ansible数据

Ansible Vault是一项允许用户加密Ansible项目中的值和数据结构的功能。这提供了保证Ansible成功运行敏感数据所必备的能力。

794
来自专栏PHP在线

JWT实现token-based会话管理

上文《3种web会话管理的方式》介绍了3种会话管理的方式,其中token-based的方式有必要从实现层面了解一下。本文主要介绍这方面的内容。上文提到token...

782
来自专栏技术博文

Cookie禁用了,Session还能用吗?详解

Cookie与 Session,一般认为是两个独立的东西,Session采用的是在服务器端保持状态的方案,而Cookie采用的是在客户端保持状态的方案。但为什么...

3306
来自专栏张善友的专栏

http响应Last-Modified和ETag以及asp.net web api实现

基础知识 1) 什么是”Last-Modified”? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Las...

1935
来自专栏比原链

剥开比原看代码10:比原是如何通过/create-key接口创建密钥的

Gitee地址:https://gitee.com/BytomBlockchain/bytom

812
来自专栏烂笔头

Python爬虫—破解JS加密的Cookie

目录[-] 前言 在GitHub上维护了一个代理池的项目,代理来源是抓取一些免费的代理发布网站。上午有个小哥告诉我说有个代理抓取接口不能用了,返回状态521...

4527
来自专栏nummy

Django实现SSO

当用户(浏览器)访问我们的服务(第三方应用)时, 服务首先判断用户是否已经登录(其实就是判断请求中是否有sessionid),如果没有登录,则重定向至认证服务器...

1473
来自专栏java一日一条

HTTP Header 详解

HTTP(HyperTextTransferProtocol) 即超文本传输协议,目前网页传输的的通用协议。HTTP协议采用了请求/响应模 型,浏览器或其他客户...

984
来自专栏Vue ssr

window.performance 网页性能计算

performance 是 浏览器提供的一个js对象,里面存储了各种性能指标。

1844

扫码关注云+社区