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 相关文章推荐
jquery通过a标签删除table中的一行的代码
Dec 02 Javascript
javascript中parentNode,childNodes,children的应用详解
Dec 17 Javascript
FireBug 调试JS入门教程 如何调试JS
Dec 23 Javascript
跟我学习javascript的执行上下文
Nov 18 Javascript
设置jQueryUI DatePicker默认语言为中文
Jun 04 Javascript
javascript实现根据汉字获取简拼
Sep 25 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
Dec 26 Javascript
jQuery向webApi提交post json数据
Jan 16 Javascript
在vue项目中引用Iview的方法
Sep 14 Javascript
详解JSON和JSONP劫持以及解决方法
Mar 08 Javascript
PHP读取远程txt文档到数组并实现遍历
Aug 25 Javascript
微信小程序中使用vant框架的具体步骤
Feb 18 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替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
用原生js做单页应用
2017/01/17 Javascript
JS中定位 position 的使用实例代码
2017/08/06 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
浅谈angular.copy() 深拷贝
2017/09/14 Javascript
prototype.js简单实现ajax功能示例
2017/10/18 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
python实现类的静态变量用法实例
2015/05/08 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
pandas.cut具体使用总结
2019/06/24 Python
Python代码太长换行的实现
2019/07/05 Python
python super的使用方法及实例详解
2019/09/25 Python
python切割图片的示例
2020/11/12 Python
python实现登录与注册系统
2020/11/30 Python
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
皮肤科医师岗位职责
2013/12/04 职场文书
社区十八大感言
2014/01/19 职场文书
《中彩那天》教学反思
2014/02/22 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
青年文明号口号
2014/06/17 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
杭白菊导游词
2015/02/10 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
CSS3 制作精美的定价表
2021/04/06 HTML / CSS