【问题标题】:Python Flask unable to get past CORSPython Flask 无法通过 CORS
【发布时间】:2020-06-30 17:33:54
【问题描述】:

我有以下用python编写的脚本

from flask import Flask, request, jsonify
from flask_cors import CORS, cross_origin

app = Flask(__name__)
CORS(app, resources=r'/chat', headers='Content-Type')


@app.route("/chat")
def chat():
  print(request)
  request.get_data()
  data = json.loads(request.data)
  response = chatbot.get_response(str(data['message']))
  response_data = response.serialize()
  response = jsonify({'data': response_data})
  return response
app.run(host="0.0.0.0", port=8900, debug=True)

我从http://localhost:8080 上运行的 JavaScript 前端调用此 API

我正在使用谷歌浏览器并收到以下错误

Access to XMLHttpRequest at 'http://localhost:8900/chat/' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

对于每个请求,我还在 Python 控制台中收到以下日志消息

127.0.0.1 - - [19/Mar/2020 15:12:00] "?[33mOPTIONS /chat/ HTTP/1.1?[0m" 404 -

我真的很沮丧,因为即使我将代码更改为

@app.route("/chat")
def chat():
  print(request)
  request.get_data()
  data = json.loads(request.data)
  response = chatbot.get_response(str(data['message']))
  response_data = response.serialize()
  response = jsonify({'data': response_data})
  response.headers.add('Access-Control-Allow-Origin', '*')
  response.headers.add('Access-Control-Allow-Headers', 'append,delete,entries,foreach,get,has,keys,set,values,Authorization')
  response.headers.add('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS')
  return response

我仍然遇到同样的错误。

【问题讨论】:

    标签: python flask cors flask-cors


    【解决方案1】:

    您可以尝试这样设置标题吗?

    from flask import Flask, request, jsonify
    from flask_cors import CORS, cross_origin
    
    app = Flask(__name__)
    CORS(app, resources=r'/chat', headers='Content-Type')
    
    
    @app.route("/chat")
    def chat():
      print(request)
      request.get_data()
      data = json.loads(request.data)
      response = chatbot.get_response(str(data['message']))
      response_data = response.serialize()
      response = jsonify({'data': response_data})
      response.headers['Access-Control-Allow-Origin'] = '*'
      response.headers['Access-Control-Allow-Headers'] = 'append,delete,entries,foreach,get,has,keys,set,values,Authorization'
      response.headers['Access-Control-Allow-Methods'] = 'GET,PUT,POST,DELETE,OPTIONS'
      return response
    app.run(host="0.0.0.0", port=8900, debug=True)
    

    【讨论】:

    • 感谢您的尝试,但我仍然得到完全相同的错误。顺便说一句,我都在控制台中得到以下日志消息。 127.0.0.1 - - [2020 年 3 月 19 日 15:12:00]“?[33mOPTIONS /chat/HTTP/1.1?[0m”404 -
    • @PrestonDocks 我编辑了我的答案,不确定它是否会起作用,但我看到大多数地方的标题都像我的新答案一样设置,所以可能值得一试......跨度>
    • 我发现了另一个问题,您的代码已经解决了这个问题。所以谢谢。小心并继续洗手。
    • 很高兴我能提供帮助!你也是!
    猜你喜欢
    • 2014-09-11
    • 2018-07-20
    • 2012-09-02
    • 2019-07-24
    • 2015-04-12
    • 2018-01-18
    • 2021-10-11
    • 2020-12-31
    • 2019-08-03
    相关资源
    最近更新 更多