Django+Vue跨域配置与经验
一、原理
同源?同源策略?
同源的定义是:两个页面的协议、端口和域名都相同
同源的例子:
不同源的例子:
同源策略SOP(Same origin policy)是一种浏览器约定,它是浏览器最核心也最基本的安全功能,为了防止浏览器受到XSS、CSFR的攻击,浏览器采用了同源策略,用于限制一个源加载的文档或脚本与另一个源的交互。
在我们的项目中,前端的vue和后端的django分别使用不同的端口,因此受到同源策略的限制,在没有跨域配置的初期,无法进行正常通信。
跨域?什么域?
跨域顾名思义就是一个网域向另一个网域发起资源交互,比如我们的前端http://localhost:9528
与后端http://127.0.0.1:8000
由于端口号的不同,处在不同的网域(源),因此进行api请求获取资源自然就是违反同源策略的跨域操作。
后端端口:
前端端口:
二、使用CORS解决跨域问题
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 源 (网域) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
Django CORS
1)安装django-cors-headers模块
pip install django-cors-headers
2) 在settings.py中配置
- 添加应用
INSTALLED_APPS = [
...
'corsheaders',
...
]
- 添加中间件
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
- 添加白名单并允许访问白名单
CORS_ORIGIN_WHITELIST = (
'http://127.0.0.1:8000',
'http://localhost:9528', #凡是出现在白名单中的域名,都可以访问后端接口
)
CORS_ALLOW_CREDENTIALS = True # 允许携带cookie
Vue Proxy
在vue.config.js
中配置proxy代理
devServer: {
...
proxy: {
'^/api': {
target: 'http://127.0.0.1:8000',
changeOrigin: true, // 允许跨域
pathRewriter: {
'^/api' : ''
}
}
},
...
},
其中,^/api
表示以"/api"开头的url将会代理到target
对应的网域中,pathRewriter表示将url中的"/api"改写为"",也就是删去。
三、踩坑/经验
在vue.config.js里配置proxy,并修改请求的url后仍无法连接到后端
- 解决:
url
最后忘了'/',导致和后端不匹配,会有404、500等错误- 后端服务未打开或出现其他错误,也会报code为500的错
api
中添加request
,记得修改url
和baseURL
(比如我们使用vue-element-admin,默认是/dev-api,改成空),否则在请求的url中间会多一个/dev-api,取不到数据proxy
中的拼写错误也会导致无法处理跨域,比如"pathRewriter"写成"pathRewrite"
- 解决:
在后来实验中,发现Django的CORS和Vue的proxy只需配置其一,就能实现跨域资源共享
四、参考
- https://zhuanlan.zhihu.com/p/92938309
- https://panjiachen.github.io/vue-element-admin-site/zh/guide/essentials/server.html#%E5%89%8D%E7%AB%AF%E8%AF%B7%E6%B1%82%E6%B5%81%E7%A8%8B
- https://www.cnblogs.com/rain-chenwei/p/9520240.html
- https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
Django+Vue跨域配置与经验的更多相关文章
- django 的跨域配置
1.跨域原理 #1. 首先浏览器安全策略限制js ajax跨域访问服务器 #2. 如果服务器返回的头部信息中有当前域: // 允许 http://localhost:8080 这个网站打开的页面中的j ...
- vue 跨域配置代理 get/post 请求
1.第一步要有 axios 插件 : npm i axios 首先要在自己的项目手动添加一个文件 vue.config.js 个人理解的为 这是axios 封装的跨域文件. 2.vue.config. ...
- Django 处理跨域的配置、前台处理ajax
一. Django处理跨域 跨域的处理方式有很多,使用最多的就是CORS(跨域资源共享),接下来大致提一下django中处理跨域的配置. 首先安装django-cors-headers模块: pip ...
- django允许跨域请求配置
django允许跨域请求配置 下载corsheader pip install django-cors-headers 修改setting.py中配置 在INSTALLED_APPS中增加corshe ...
- vue跨域问题解决(生产环境)
vue跨域问题解决(使用webpack打包的) 配置代理:(config下index.js文件) module.exports = { dev: { env: require('./dev.env') ...
- nginx-springboot-vue前后端分离跨域配置
nginx-springboot-vue前后端分离跨域配置 引言 接着上篇--简单的springboot-vue前后端分离登录Session拦截的demo,其中跨域是通过springboot后端全局设 ...
- vue跨域处理
本人对于vue跨域处理流程不是很清楚,特此理顺一遍. 1.在config中进行配置,该文件不是都存在,需要自己建: proxyTable,这个参数主要是一个地址映射表,你可以通过设置将复杂的url简化 ...
- vue 跨域 springCloud @CrossOrigin注解
vue 跨域 springCloud @CrossOrigin注解 一丶什么是跨域 跨域问题来源于浏览器的同源策略,浏览器为了提高网站的安全性,在发送ajax请求时,只有在当前页面地址与请求地址的协 ...
- [转]vue跨域解决方法
vue跨域解决方法 vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' hea ...
随机推荐
- stat 命令家族(4)- 详解 iostat
性能测试必备的 Linux 命令系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1819490.html 介绍 报告 CPU 信息和 I/ ...
- Git 系列教程(11)- 分支简介
前言 很多版本控制系统都有分支这个概念 使用分支意味着可以将日常工作从主线上脱离,从而避免影响主线 Git 鼓励在工作流程中频繁使用分支和合并 Git 是如何保存数据的 Git 保存的不是文件的变化或 ...
- K8S_第一课作业_20200407
(1)通过cgroup来限制memory ##消耗内存脚本 /tmp/xmem.sh #!/bin/bash mkdir /tmp/memory mount -t tmpfs -o size=2048 ...
- mysql忘记root密码连接本地库
http://www.cnblogs.com/zf2011/archive/2012/03/13/2393387.html 今天想做个小项目,决定用mysql数据库,但是好久没用mysql了,也忘掉了 ...
- 【noip1998】题解:2的幂次方
思路:设递归函数dfs(x)用于输出x的幂次方 最容易的思路:0不输出,1输出为2(0),2输出2,剩下的递归执行. 每一次递归:例如7,拆分为4+3,先拆出最大的是2的次方的数出来,输出4,再把3分 ...
- Linux系列(13) - CentOs 8 配置静态IP
step-1 vim etho的配置文件 [root#localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 step-2 新增修改以下 ...
- requests接口自动化-动态关联text/html格式
动态关联,前一个接口返回的值为后一个接口请求的参数. # 动态关联 import requests def test_cookies(): # 以百度为例 r_baidu=requests.get(' ...
- Java学习之随堂笔记系列——day04
今日内容1.break和continue关键字以及循环嵌套 1.1 break和continue的区别? continue表示跳过当前循环,继续执行下一次循环break表示结束整个 ...
- python并发与futures模块
非并发程序(用于对比) 从网上下载20个国家的国旗图像: import os import time import sys import requests # 导入requests库 POP20_CC ...
- 三分钟图解 MVCC,看一遍就懂
前文我们介绍了 InnoDB 存储引擎在事务隔离级别 READ COMMITTED 和 REPEATABLE READ(默认)下会开启一致性非锁定读,简单回顾下:所谓一致性非锁定读就是每行记录可能存在 ...