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 EasyUI API 中文文档 - ComboBox组合框
Oct 07 Javascript
jquery实现预览提交的表单代码分享
May 21 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
Nov 24 Javascript
javascript中replace使用方法总结
Mar 01 Javascript
原生JS实现导航下拉菜单效果
Nov 25 Javascript
BootStrap模态框闪退问题实例代码详解
Dec 10 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
Feb 22 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
vue-router之实现导航切换过渡动画效果
Oct 31 Javascript
layui 弹出层值回传解决方式
Nov 14 Javascript
详解JavaScript作用域、作用域链和闭包的用法
Sep 03 Javascript
javascript代码实现简易计算器
Jan 25 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
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
VB中的RasEnumConnections函数返回632错误解决方法
2014/07/29 PHP
php 删除cookie方法详解
2014/12/01 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
一个很酷的拖动层的js类,兼容IE及Firefox
2009/06/23 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
浏览器页面区域大小的js获取方法
2013/09/21 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
Bootstrap学习笔记之css样式设计(2)
2016/06/07 Javascript
js编写选项卡效果
2017/05/23 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
Less 安装及基本用法
2018/05/05 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
ES6中字符串的使用方法扩展
2019/06/04 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
python语言使用技巧分享
2016/05/31 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
Selenium alert 弹窗处理的示例代码
2020/08/06 Python
Python Pivot table透视表使用方法解析
2020/09/11 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
耐克中国官方商城:Nike中国
2018/10/18 全球购物
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
数据库测试通常都包括哪些方面
2015/11/30 面试题
公司员工的自我评价范例
2013/11/01 职场文书
信访工作汇报材料
2014/10/27 职场文书
中学生逃课检讨书
2015/02/17 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技