上述代码由 http://localhost:3000/index.html 向 http://localhost:4000/ 跨域请求,正如我们上面所说的,后端是实现 CORS 通信的关键 。
应用django-cors-headersdrf后端+vue前端的项目在做以drf框架作为后端支撑以及以vue前端框架作为页面展示的前后端分离的web项目中,前端会向后端请求数据,也会涉及到非同源跨域的问题,以下操作将做详细处理
# vue前端域名www.aliang.cn# drf后端域名api.aliang.com修改vue项目的配置信息
- 通过浏览器访问前端vue项目,会出现Nginx的欢迎页面,主要因为我们当前操作中已经有一个nginx监听了80端口,所以访问 www.aliang.cn 网址时,会自动被转发到127.0.0.1本机,因为没有网址默认端口是80端口,所以被nginx进行处理了当前请求,因此我们暂时先把nginx关闭 。
# 查找nginx的进程ps -ef|grep nginx# 关闭进程sudo kill -9 nginx进程号- 修改vue项目的配置文件config/index.js
host: 'www.aliang.cn', // can be overwritten by process.env.HOSTport: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determinedautoOpenBrowser: true,- 保存修改信息,并重启项目
- 通过浏览器访问drf项目,会出现以下错误信息You may need to add 'api.aliang.com' to ALLOWED_HOSTS
- 可以通过设置drf项目中的配置文件, settings/dev.py的ALLOWED_HOSTS ,设置允许访问
# 设置哪些客户端可以通过地址访问到后端ALLOWED_HOSTS = ['api.aliang.cn',]- 现在,前端与后端分处不同的域名,我们需要为后端添加跨域访问的支持否则前端使用axIOS则无法请求到后端提供的api数据,故使用CORS来解决后端对跨域访问的支持 。
- 安装
pip install django-cors-headers -i https://pypi.douban.com/simple/- drf后端项目配置文件中添加应用
INSTALLED_APPS = (...'corsheaders',...)- drf后端项目配置文件中设置中间件【必须写在第一个位置】
MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware',...]- drf后端项目配置文件中添加白名单
# CORS组的配置信息CORS_ORIGIN_WHITELIST = ('www.aliang.cn:8080',)CORS_ALLOW_CREDENTIALS = True# 允许ajax跨域请求时携带cookie完成了上面的步骤,我们就可以通过后端提供数据给前端使用ajax访问了 。- 前端使用 axios就可以访问到后端提供给的数据接口,但是如果要附带cookie信息,前端还要设置一下 。需要注意的是,如果要发送Cookie, Access-Control-Allow-Origin 就不能设为星号,必须指定明确的、与请求网页一致的域名 。同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的 document.cookie 也无法读取服务器域名下的Cookie 。
- 前端引入axios插件并配置允许axios发送cookie信息[axios本身也不允许ajax发送cookie到后端]
npm i axios -S- 在main.js中引用 axios插件
import axios from 'axios'; // 从node_modules目录中导入包// 允许ajax发送请求时附带cookieaxios.defaults.withCredentials = true;Vue.prototype.$axios = axios; // 把对象挂载vue中如果你拷贝前端vue-cli项目到咱们指定目录下,如果运行起来有问题,一些不知名的错误,那么就删除node_modules文件件,然后在项目目录下执行 npm install 这个指令,重新按照package.json文件夹中的包进行node_modules里面包的下载原文作者:阿良
原文链接:https://www.cnblogs.com/fengting0913/p/13451489.html
【使用cors完成跨域请求处理】
推荐阅读
- 超过35%的德国中小企业已使用人工智能技术
- 技术转载 || 使用java API进行zip递归压缩文件夹以及解压
- SpringBoot中使用dubbo实现RPC调用
- 正确的消毒柜使用方法
- 丰田卡罗拉双擎三种模式怎么使用?
- 新笔记本电脑硬盘已用12小时?新笔记本硬盘使用时间6小时?
- 在SpingBoot中使用Redis对接口进行限流
- SpringBoot使用OpenCV总结
- 使用时间轮实现“延时任务”
- 6个顶级可视化Python库
