就在几天前,我不需要对 Flask-CORS 扩展进行任何修改 使用。显然我现在知道了。
控制台在 POST 请求时给我这个错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5000/blog/posts. (Reason: CORS preflight response did not succeed)
我的配置之一:
class BaseConfig:
CORS_HEADERS = 'Content-Type'
...
...
__init__.py
:
...
...
from flask_cors import CORS
cors = CORS()
def create_app(script_info=None):
app = Flask(__name__)
app.config.from_object(BaseConfig)
cors.init_app(app, resources={r"/*": {"origins": "*"}})
...
...
return app
我的蓝图:
from flask_cors import cross_origin
...
...
class MyClass(Resource):
def get(self):
...
...
@cross_origin()
def post(self):
...
...
几天前,我所要做的只是初始化扩展,它完成了其余的工作。现在,即使明确指定我允许从任何地方访问,我也会收到错误。一旦这有效,我会将其范围缩小到只有一个域,但这仍然会引发错误。
我尝试使用
logging.getLogger('flask_cors').level = logging.DEBUG
获取一些调试输出
127.0.0.1 - - [04/Feb/2021 11:02:31] "OPTIONS /blog/posts HTTP/1.1" 404 -
有什么建议吗?
我建议您使用以下代码片段,并且您不再需要使用 CORS 装饰器。但要小心,如果你使用 Nginx 作为反向代理,你也必须为 Nginx 添加适当的标头。
cors = CORS(flask_app, resources={r"/api/*": {"origins": "*", "allow_headers": "*", "expose_headers": "*"}})
这仅供那些也遇到这些问题的人参考。我尝试了各种选项,但在 Chrome 中都不起作用。
由于它只是一个小型样板应用程序,我终于在我的 React 应用程序中成功地将“localhost”替换为“127.0.0.1”:
const response = await axios.post('http://localhost:5000/calculate')
与
const response = await axios.post('http://127.0.0.1:5000/calculate')
之后就成功了。