为 Flask-CORS 指定域

D D*_*ane 4 python cors flask

我有一个用作 web api 的 Python 脚本,许多域会调用它来获取他们想要的数据。所以为了使这个可行,我需要启用 CORS。我通读了 Flask 文档,但没有找到指定多个域以允许它们使用 CORS 的方法。

这是启用 CORS 的代码片段:

from flask_cors import cross_origin

@app.route("/")
@cross_origin()
Run Code Online (Sandbox Code Playgroud)

上面的代码片段为所有域启用了 CORS。我想将其限制为某些特定的域列表。我只想知道如何指定此列表。这是我想要做的:

@cross_origin(["www.domain1.com, www.domain2.com"])
Run Code Online (Sandbox Code Playgroud)

San*_*ana 8

来自 CORS 的文档:http : //flask-cors.corydolphin.com/en/latest/api.html? highlight= origin#flask_cors.cross_origin

flask_cors.cross_origin(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

允许请求的来源或来源列表。原点可能是正则表达式、区分大小写的字符串或星号

所以,在这里,你需要给liststring。喜欢:

cross_origin(["http://www.domain1.com", "http://www.domain2.com"]) 
Run Code Online (Sandbox Code Playgroud)

请注意,您在单个字符串中提供了所有域。但是你需要提供一个列表。另请注意,您根据RFC 6454W3C 建议提供完全限定域名 (FQDN) 。

你也可以做这样的事情:

cors = CORS(app, resources={r"/api/*": {"origins": "*"}})
Run Code Online (Sandbox Code Playgroud)

在这里,我们允许应用程序中的每条路径都以/api. 根据您的要求,您可以在此处定义适当的路径。您还可以在此处指定要为其启用 CORS 的域列表的来源。

这是我编写的代码的链接:https : //github.com/Mozpacers/MozStar/

CORS 没有做任何特别的事情;你只需要用一个特殊的头来回复请求,它说Access-Control-Allow-Origin包含域请求来自。

对于飞行前请求,您可以看到如何使用 Flask before_request 和 after_request 装饰器使用自定义标头进行回复:https : //github.com/CuriousLearner/TrackMyLinks/blob/master/src/server/views.py#L130

  • 嗨,Sanyam,我明白了,它应该是一个类似 cors = CORS(app, resources={r"/api/*": {"origins": ["domain1.com",domain2.com]}}) 的列表。谢谢 (4认同)