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 相关文章推荐
解决 firefox 不支持 document.all的方法
Mar 12 Javascript
让你的网站可编辑的实现js代码
Oct 19 Javascript
jquery随意添加移除html的实现代码
Jun 21 Javascript
jQuery拖拽 & 弹出层 介绍与示例
Dec 27 Javascript
JS实现倒计时和文字滚动的效果实例
Oct 29 Javascript
学习使用bootstrap3栅格系统
Apr 12 Javascript
用js实现简单算法的实例代码
Sep 24 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
Oct 15 Javascript
微信小程序 wxapp内容组件 progress详细介绍
Oct 31 Javascript
快速解决js中window.location.href不工作的问题
Nov 02 Javascript
JS库之Highlight.js的用法详解
Sep 13 Javascript
js实现头像上传并且可预览提交
Dec 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
php中函数的形参与实参的问题说明
2010/09/01 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
浅谈NodeJS中require路径问题
2015/05/07 NodeJs
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
javascript中的正则表达式使用详解
2015/08/30 Javascript
jQuery File Upload文件上传插件使用详解
2016/12/06 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
JSON字符串和JSON对象相互转化实例详解
2017/01/05 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
2020/02/27 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
详解在Python和IPython中使用Docker
2015/04/28 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
2016/02/18 Python
Python的SQLalchemy模块连接与操作MySQL的基础示例
2016/07/11 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
使用python实现简单五子棋游戏
2019/06/18 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
python属于跨平台语言码
2020/06/09 Python
python如何使用代码运行助手
2020/07/03 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
历史学专业毕业生求职信
2013/09/27 职场文书
中学老师的自我评价
2013/11/07 职场文书
满月酒主持词
2014/03/27 职场文书
设备售后服务承诺书
2014/05/30 职场文书
爱护公共设施的标语
2014/06/24 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
2014年双拥工作总结
2014/11/21 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript