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 相关文章推荐
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
Jan 27 Javascript
js日期对象兼容性的处理方法
Jan 28 Javascript
javascript中加号(+)操作符的一些神奇作用
Jun 06 Javascript
JQuery中使用on方法绑定hover事件实例
Dec 09 Javascript
javascript实现类似超链接的效果
Dec 26 Javascript
基于bootstrap3和jquery的分页插件
Jul 31 Javascript
jQuery实现选项卡切换效果简单演示
Dec 09 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
微信小程序开发之Tabbar实例详解
Jan 09 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
js实现鼠标拖拽缩放div实例代码
Mar 25 Javascript
nodemon实现Typescript项目热更新的示例代码
Nov 19 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定时执行计划任务的多种方法小结
2011/12/19 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
[原创]来自ImageSee官方 JavaScript图片浏览器
2008/01/16 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
jquery实现滑动特效代码
2015/08/10 Javascript
非常实用的js验证框架实现源码 附原理方法
2016/06/08 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
python中的五种异常处理机制介绍
2014/09/02 Python
Python实现多线程抓取妹子图
2015/08/08 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
python导入模块交叉引用的方法
2019/01/19 Python
Python&&GDAL实现NDVI的计算方式
2020/01/09 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
建筑工程技术应届生求职信
2013/11/17 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
餐厅销售主管职责范本
2014/02/19 职场文书
全陪导游词
2015/02/04 职场文书
大学运动会通讯稿
2015/07/18 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
2016年寒假见闻
2015/10/10 职场文书
小数乘法教学反思
2016/02/22 职场文书
MySQL 聚合函数排序
2021/07/16 MySQL