使用 Heroku 部署的烧瓶 API"CORS 被阻止"错误



我在部署到 Heroku 的应用程序上遇到问题。当我在本地主机上开发它时,我没有收到此错误,但是一旦我部署了它,它就会自发地抛出此错误:

Access to fetch at 
'https://frontend.herokuapp.com' from origin 
'https://backend.herokuapp.com' has been blocked 
by CORS policy: No 'Access-Control-Allow-Origin' header is present 
on the requested resource. If an opaque response serves your needs, 
set the request's mode to 'no-cors' to fetch the resource with CORS 
disabled.

我的 Flask 服务器的简化版本:

from flask import Flask, request, make_response, jsonify, url_for, 
redirect, render_template
from flask_cors import CORS, cross_origin
import flask
import json
app = Flask(__name__)
CORS(app)
@app.route('/api/action', methods=['GET', 'POST'])
@cross_origin()
def prescription(response={}):
# POST request
if request.method == 'POST':
print('score POST request')
response = request.get_json()
data = json.loads(response.get('data'))
rating = a_super_cool_feature
return jsonify(rating), 200
# GET request
else:
print('GET request')
return getScore(response)
@app.route('/api/score', methods=['GET', 'POST'])
@cross_origin()
def scoreHandler(response={}):
# POST request
if request.method == 'POST':
print('Incoming..')
response = request.get_json()
parseResponse(response)
return str(getScore(response)), 200

# GET request
else:
return getScore(response)

@app.route('/test')
def test_page():
# look inside `templates` and serve `index.html`
return render_template('index.html')
if __name__ == "__main__":
app.debug=True
app.run()

我的前端是一个 React 应用程序。这两个服务器在不同的 Heroku 服务器上运行,我使用的是免费版本,所以我一次只能获得一个测功机(以防这可能导致此错误(。

有趣的是:

大约一半的时间,当在部署的 Heroku 应用程序上调用这些 POST 请求时,会抛出错误。否则,它没有问题。关于解决这个问题的任何想法?

您可以使用此代码段在 cors 应用程序范围内启用。

from flask import Flask
from flask_cors import CORS
app = Flask(__name__) CORS(app)

好的,现在我实际上修复了它。我在 Heroku 中购买了"爱好"dyno 类型,现在我从来没有收到错误。我认为这只是与我发出请求时另一台服务器没有启动并运行有关,因为我一次只能使用免费版本运行一个dyno。因此,它以某种方式超时并给出该错误。

使用爱好dyno类型,我的后端始终在运行,因此当我发出请求时,它不再超时并给出该错误。

非常奇怪的伪修复。基本上,在我向 Flask 后端发出 POST 请求的大约 40% 的时间中,它给了我这个错误,然后我添加了

app.config['CORS_HEADERS'] = 'Content-Type'

在以下情况下:

app = Flask(__name__)
CORS(app)

这并没有完全解决问题。然而;现在,当向后端发出请求时,此错误仅在大约 5% 的时间内引发。有关实际修复,请参阅其他答案。

相关内容

  • 没有找到相关文章

最新更新