Flask CORS未阻止不必要来源的请求
我正在测试一个Flask的REST API,我想限制只有本地开发和上线后某个特定网址可以访问这个API,其他地方都不行。我以为设置CORS_ORIGINS这个配置就能解决问题,但它还是允许其他请求访问API。我又试了这里的方法,但请求依然有效。这个API运行在localhost:5000/api
上,而我另外开了一个HTTP服务器,使用python3 -m http.server
,它运行在localhost:8000
。当我在HTTP服务器的开发者工具控制台里用await fetch('http://localhost:5000')
请求时,依然能成功请求到数据,虽然这些请求应该被阻止,对吧?
from flask import Flask, jsonify
from flask_cors import CORS
cors = CORS()
def create_app():
app = Flask(__name__, instance_relative_config=True)
app.config.from_mapping(CORS_ORIGINS="http://localhost:5000")
cors.init_app(app, resources={"r/*": {"origins": "http://localhost:5000"}})
@app.route('/api')
def api():
return jsonify({'success': "Healthy: OK"}), 201
return app
有没有什么想法我可能做错了?或者有没有更好的方法来限制我的API访问,只让本地或特定域名可以访问?
谢谢!
1 个回答
0
CORS是浏览器通常会执行的一种规则。它的作用是阻止你的网页从其他服务器获取数据,只有当服务器在ALLOW_ORIGINS头部允许时,才可以这样做。你遇到的问题是无法执行CORS。我猜这可能是因为你在使用本地服务器(localhost)。因为很多浏览器对本地服务器的限制比较宽松,以便于开发。你可能需要把你的服务器和网页部署在不同的服务器上,才能真正体验到CORS的效果。希望这些信息对你有帮助。