解决使用Vue.js前端与Flask后端API交互时跨源资源共享问题

我在使用flask以及Vue做一个项目时遇到了Vue前端与Flask后端API交互的问题就是前端获取不到后端返回的数据,报错:

上网查说是跨域问题,于是找了一些解决办法,就是可以通过设置响应头的 Access-Control-Allow-Origin 字段来允许所有用户访问你的 API。这个字段告诉浏览器,你的 API 可以被来自哪些域的请求访问。如果你设置为 *,那么你的 API 将被所有域访问。示例代码:

python 复制代码
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/data', methods=['GET'])
def get_data():
    # 假设你的数据存储在某个文件中
    with open('data.json', 'r') as f:
        data = json.load(f)
    
    # 设置响应头允许所有域访问
    response = jsonify(data)
    response.headers.add('Access-Control-Allow-Origin', '*')
    
    return response

if __name__ == '__main__':
    app.run(debug=True)

在这个例子中,我们使用 jsonify 函数来创建一个 JSON 响应,并添加了一个 Access-Control-Allow-Origin 响应头,允许来自任何域的请求访问我们的 API。

果然加了之后前端就能获取到后端返回的数据了,但是我在后端获取前端传的参数时又出现了呢个跨域错误,不知道是什么问题,明明前端已经能获取到后端返回的数据了,但是后端有获取不到前端传来的参数了,有大佬知道的可以解释一下。

于是我又在网上找了一些使用flask以及Vue做的项目教程,参考教程FLASK+VUE+axios前后端交互_axios flask-CSDN博客,偶然看到了CORS(app, resources=r'/*')是解决跨域请求报错的设置,于是抱着试试的态度果然有效,就是先下载flask_cors,下载的时候可以加一个阿里云源,这样下载的时候快一些:

bash 复制代码
pip install flask_cors -i https://mirrors.aliyun.com/pypi/simple

然后在你的代码里面加上下面这两行即可。

python 复制代码
from flask_cors import CORS
CORS(app, resources=r'/*')

解决之后又去了解了一下原理:

在 Flask 中,`CORS(app, resources=r'/*')` 这一行代码用于配置跨源资源共享(CORS)。CORS 是 W3C 标准,用于限制从一个源加载的 Web 页面的脚本与另一个源资源进行交互。这个配置允许来自任何源的请求都可以访问你的 Flask 应用。

具体来说,`CORS(app, resources=r'/*')` 意味着所有路径(`/*`)都受 CORS 配置的影响。这通常用于允许来自不同域的前端应用(如使用 Vue.js 的前端应用)与你的 Flask 后端 API 进行交互。

这个配置通常与 Flask-CORS 扩展一起使用,Flask-CORS 是一个用于 Flask 的 CORS 中间件。你需要在你的 Flask 应用中安装 Flask-CORS 扩展,然后使用 `CORS()` 函数来配置它。

以下是如何在 Flask 应用中使用 Flask-CORS 扩展的示例:

python 复制代码
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app, resources=r'/*')

@app.route('/api/data', methods=['GET'])
def get_data():
    # 假设你的数据存储在某个文件中
    with open('data.json', 'r') as f:
        data = json.load(f)
    return data

if __name__ == '__main__':
    app.run(debug=True)

在这个例子中,`CORS(app, resources=r'/*')` 确保了所有请求(无论源域如何)都可以与你的 `/api/data` 端点进行交互。这通常用于允许前端应用与后端 API 进行通信,即使它们位于不同的域或协议上。

希望可以帮助到大家。

相关推荐
林的快手27 分钟前
CSS列表属性
前端·javascript·css·ajax·firefox·html5·safari
匹马夕阳1 小时前
ECharts极简入门
前端·信息可视化·echarts
API_technology1 小时前
电商API安全防护:JWT令牌与XSS防御实战
前端·安全·xss
yqcoder1 小时前
Express + MongoDB 实现在筛选时间段中用户名的模糊查询
java·前端·javascript
十八朵郁金香2 小时前
通俗易懂的DOM1级标准介绍
开发语言·前端·javascript
计算机-秋大田2 小时前
基于Spring Boot的兴顺物流管理系统设计与实现(LW+源码+讲解)
java·vue.js·spring boot·后端·spring·课程设计
m0_528723813 小时前
HTML中,title和h1标签的区别是什么?
前端·html
Dark_programmer3 小时前
html - - - - - modal弹窗出现时,页面怎么能限制滚动
前端·html
GDAL3 小时前
HTML Canvas clip 深入全面讲解
前端·javascript·canvas
禾苗种树3 小时前
在 Vue 3 中使用 ECharts 制作多 Y 轴折线图时,若希望 **Y 轴颜色自动匹配折线颜色**且无需手动干预,可以通过以下步骤实现:
前端·vue.js·echarts