Django+vue跨域问题解决的详细步骤


Posted in Javascript onJanuary 20, 2019

跨域

由于开发模式为前后端分离式开发,故而通常情况下,前端和后端可能运行不同的ip或者port下,导致出现跨域问题,故而单独说明

什么是跨域

跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。

其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景。

什么是同源策略?

同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

同源策略限制以下几种行为:

  1. Cookie、LocalStorage 和 IndexDB 无法读取
  2. DOM 和 Js对象无法获得
  3. AJAX 请求不能发送

跨域错误浏览器会在控制台中出现如下错误:

报错信息如下:

Access to XMLHttpRequest at ' http://127.0.0.1 :8000/api/test/' from origin ' http://127.0.0.1 :3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

翻译过来即是:从源地址 http://127.0.0.1 :3000 发起的到 http://127.0.0.1 :8000/api/test/ 的XMLHttpRequest访问违反了同源策略:因为在请求头中没有Access-Control-Allow-Origin的值

前端解决跨域

既然跨域是因为不同源,那我同源不就完事儿了,但是后端请求地址不可能改变,所以可以在前端和后端的中间加一层代理,前端通过代理访问后端。

在Vue-cli工具中已经提供了代理的功能,只需要配置即可。

在根目录下的config/index.js文件中有如下配置项:

proxyTable: {
   '/': { 
    target: 'http://127.0.0.1:8000/',
    changeOrigin: true,
    pathRewrite: {
     '^/api': ''
    }
   }
  },
  1. '/'表示以'/'(即所有的路径)开头的路径均需要代理,
  2. target:代理的目标服务器地址(即后端服务器地址)为 ' http://127.0.0.1 :8000/',
  3. changeOrigin,为修改源:修改请求中的源地址
  4. pathReWrite:URL路径重写,对于以'/api'开头的路径将'/api'替换为''

后端解决跨域

后端出于安全考虑,也会对于跨域有限制,解决方法如下:

安装django-cors-headers

$ pip install django-cors-headers

配置settings.py文件

INSTALLED_APPS = [
  ...
  'corsheaders',
  ...
 ] 

MIDDLEWARE_CLASSES = (
  ...
  'corsheaders.middleware.CorsMiddleware',
  'django.middleware.common.CommonMiddleware', # 注意顺序
  ...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
  '*'
)

CORS_ALLOW_METHODS = (
  'DELETE',
  'GET',
  'OPTIONS',
  'PATCH',
  'POST',
  'PUT',
  'VIEW',
)

CORS_ALLOW_HEADERS = (
  'XMLHttpRequest',
  'X_FILENAME',
  'accept-encoding',
  'authorization',
  'content-type',
  'dnt',
  'origin',
  'user-agent',
  'x-csrftoken',
  'x-requested-with',
  'Pragma',
)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript getElementsByClassName实现代码
Oct 11 Javascript
浅谈javascript中的作用域
Apr 07 Javascript
javascript关于继承的用法汇总
Dec 20 Javascript
javascript实现简单的分页特效
Aug 12 Javascript
Javascript同时声明一连串(多个)变量的方法
Jan 23 Javascript
使用node.js搭建服务器
May 20 Javascript
微信小程序自定义组件
Aug 16 Javascript
jQuery Dom元素操作技巧
Feb 04 jQuery
详解js删除数组中的指定元素
Oct 31 Javascript
微信小程序实现选项卡效果
Nov 06 Javascript
微信小程序自定义tabBar组件开发详解
Sep 24 Javascript
vue实现标签云效果的示例
Nov 09 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
Jan 20 #Javascript
JavaScript禁用右键单击优缺点分析
Jan 20 #Javascript
JavaScript中concat复制数组方法浅析
Jan 20 #Javascript
JavaScript中import用法总结
Jan 20 #Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
Jan 20 #Javascript
js序列化和反序列化的使用讲解
Jan 19 #Javascript
vue-router传参用法详解
Jan 19 #Javascript
You might like
生成静态页面的PHP类
2006/07/15 PHP
BBS(php & mysql)完整版(六)
2006/10/09 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
2014/06/13 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
JS图片等比例缩放方法完整示例
2016/08/03 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
python处理按钮消息的实例详解
2017/07/11 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
CSS3实现苹果手机解锁的字体闪亮效果示例
2021/01/05 HTML / CSS
中国旅游网站:同程旅游
2016/09/11 全球购物
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
简单英文演讲稿
2014/01/01 职场文书
元旦寄语大全
2014/04/10 职场文书
公关活动策划方案
2014/05/25 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
清明节随笔
2015/08/15 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers