Flask CORS未阻止不必要来源的请求

0 投票
1 回答
38 浏览
提问于 2025-04-14 15:54

我正在测试一个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的效果。希望这些信息对你有帮助。

撰写回答