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对象和属性的创建方法
Jan 15 Javascript
原生javascript实现图片滚动、延时加载功能
Jan 12 Javascript
JavaScript 模块的循环加载实现方法
Dec 13 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
Dec 15 Javascript
微信公众号开发 实现点击返回按钮就返回到聊天界面
Dec 15 Javascript
简单谈谈JS中的正则表达式
Sep 11 Javascript
微信小程序使用modal组件弹出对话框功能示例
Nov 29 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
Jan 25 Javascript
Angular Excel 导入与导出的实现代码
Apr 17 Javascript
解决vue项目router切换太慢问题
Jul 19 Javascript
js实现验证码功能
Jul 24 Javascript
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
如何在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
dedecms系统常用术语汇总
2007/04/03 PHP
PHP 魔术函数使用说明
2010/05/14 PHP
PHP连接MongoDB示例代码
2012/09/06 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
php提取微信账单的有效信息
2018/10/01 PHP
让FireFox支持innerText的实现代码
2009/12/01 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
AMD异步模块定义介绍和Require.js中使用jQuery及jQuery插件的方法
2014/06/06 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
JavaScript ES5标准中新增的Array方法
2016/06/28 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
vue项目中引入noVNC远程桌面的方法
2018/03/05 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
深入理解Python中的*重复运算符
2017/10/28 Python
机器学习python实战之手写数字识别
2017/11/01 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Python global全局变量函数详解
2018/09/18 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
python飞机大战pygame游戏背景设计详解
2019/12/17 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
开学典礼感言
2014/02/16 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
节水宣传标语口号
2015/12/26 职场文书