Flask 如何修复:“;起源<;本地主机>;访问控制允许源不允许使用带烧瓶的

Flask 如何修复:“;起源<;本地主机>;访问控制允许源不允许使用带烧瓶的,flask,cors,flask-cors,Flask,Cors,Flask Cors,我已经用flask CORS建立了一个服务器,并让它向我构建的React web应用发送数据,但当我去测试POST方法时,它停止了工作,现在它在发送和接收时坏了。web应用程序控制台中的错误日志为:“访问控制不允许源代码。允许源代码。由于访问控制检查,无法加载获取API。” 我之前遇到过这个问题,并添加了flask_cors,它运行了一段时间。这是我的服务器代码: from flask_cors import CORS, cross_origin app = FlaskAPI(__name__

我已经用flask CORS建立了一个服务器,并让它向我构建的React web应用发送数据,但当我去测试POST方法时,它停止了工作,现在它在发送和接收时坏了。web应用程序控制台中的错误日志为:“访问控制不允许源代码。允许源代码。由于访问控制检查,无法加载获取API。”

我之前遇到过这个问题,并添加了flask_cors,它运行了一段时间。这是我的服务器代码:

from flask_cors import CORS, cross_origin

app = FlaskAPI(__name__)
app.config['SECRET_KEY'] = 'the quick brown fox jumps over the lazy dog'
app.config['CORS_HEADERS'] = 'Content-Type'

cors = CORS(app, resources={r"/": {"origins": "http://localhost:port"}})
# Also fails with this variation
# cors = CORS(app, resources={r"/api/*": {"origins": "*"}})

@app.route("/", methods=['GET', 'POST'])
@cross_origin(origin='localhost',headers=['Content- Type','Authorization'])
# Also fails with these variations
# @cross_origin(origin='http://127.0.0.1:5000/',headers=['Content- Type','Authorization'])
# @cross_origin(origin='http://localhost:3000',headers=['Content- Type','Authorization'])  
def job_api():
    with app.app_context():
        job_data = get_job_data()
        json_data = jsonify(eqtls=[job.data for job in job_data])
        return json_data

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

这是我的客户代码:

  componentDidMount() {
        fetch('http://127.0.0.1:5000/')
        .then(res => res.json())
        .then((data) => {
          this.setState({ job_data: data.eqtls })
        })
        .catch(console.log)
  }

您需要在API上启用CORS策略,以便它可以接受来自不同主机的请求

只需做一个google Flask cors,并确保您接受“*”或您的URL

如果您接受COR,那么您应该能够接受所有COR,然后使您的API足够健壮,这样就不会请求讨厌的数据

尝试:
我阅读了文档站,可以添加@cross_origin()作为一个简单的装饰器:

您需要在API上启用CORS策略,以便它可以接受来自不同主机的请求

只需做一个google Flask cors,并确保您接受“*”或您的URL

如果您接受COR,那么您应该能够接受所有COR,然后使您的API足够健壮,这样就不会请求讨厌的数据

尝试:
我阅读了文档站,可以添加@cross_origin()作为一个简单的修饰语:

我根据你的评论做了一些修改(并在原始问题中添加了我所尝试的内容),但仍然以同样的方式失败。“cors=cors(app,resources={r”/:{“origins”:“}})”这一行看起来错误。。。那家伙在干什么?端口也应该是您的端口,并且看起来不像您使用的cors变量。。另外@cross_origin(origin='localhost',headers=['Content-Type','Authorization…Content-Type]中没有空格。请尝试添加*star而不是使用localhost:@cross_origin(origin='*'我不确定r的用途,但在以下示例中使用了它:。我尝试替换对'*'的两个localhost引用,但没有更改结果。根据您链接的文档更新了我的答案。因此,我将代码还原到以前的位置,并且您的方法可以工作(我以前的版本也是如此)。这很有趣,因为我正在更改的是数据的来源:如果get_job_data()在另一个文件中调用Selenium,它工作得很好,否则如果我在同一个文件中硬编码了相同类型的测试值,它将失败……我根据您的评论尝试了一些修改(并且刚刚在原始问题中添加了我试图添加的内容),但仍然以同样的方式失败。“cors=cors(app,resources={r”/“{origins:“}”)这行看起来有问题……r在做什么?而且Port应该是您的Port,它看起来不像您使用的cors变量。。还有@cross_origin(origin='localhost',headers=['Content-Type','Authorization…Content-Type中没有空格。请尝试添加*star,而不是使用localhost:@cross\u origin(origin='*'我不确定r的用途,但在以下示例中使用了它:。我尝试替换对'*'的两个localhost引用,但没有更改结果。根据您链接的文档更新了我的答案。因此,我将代码还原到以前的位置,并且您的方法可以工作(我以前的版本也是如此)。这非常有趣,因为我正在更改的是数据的来源:如果get_job_data()在另一个文件中调用Selenium,它将正常工作,否则如果在同一个文件中有相同类型的硬编码测试值,它将失败。。。
from flask_cors import CORS, cross_origin

app = FlaskAPI(__name__)
app.config['SECRET_KEY'] = 'the quick brown fox jumps over the lazy dog'
app.config['CORS_HEADERS'] = 'Content-Type'


@app.route("/", methods=['GET', 'POST'])
@cross_origin()
def job_api():
    with app.app_context():
        job_data = get_job_data()
        json_data = jsonify(eqtls=[job.data for job in job_data])
        return json_data

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