我在为我在Phaser中开发的一个小游戏提供静态文件(图像资产等)时遇到问题。我在服务器上使用flask-socketio(在客户端使用socket.io)进行网络,这就是为什么我试图让它在Flask下工作。据我所知,我必须使用 Flask 来提供静态资源,否则我会遇到Same-origin policy的问题。
事实上,我尝试在不同的端口上使用 nginx 提供资产,但我在浏览器控制台(本例中为 Safari)中收到了这条消息:SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.
我查看了关于如何提供静态文件的 Flask 文档,它说要使用“<em>url_for”。但是,这只适用于 HTML 模板文件。我正在尝试使用 Phaser 引擎在我的 javascript 代码中加载静态资源,如下所示(仅作为示例):
this.load.image('player', 'assets/player.png’); //this.load.image('player’, url);
我显然不能使用 '<em>url_for' 因为它不是模板文件而是 javascript 代码。
所以我的问题是,如何为我的静态资源提供服务,以免违反同源策略?
- 除了使用 '<em>url_for' 之外,还有另一种在 Flask 中提供静态资源的安全方法吗?
- 或者我应该使用 nginx 作为反向代理?在 flask-socketio 文档中,我找到了这个 nginx 配置片段:Flask-SocketIO 文档(请向下滚动到上面写着“使用 nginx 作为 WebSocket 反向代理”的位置)
关于#2,我不太明白它应该如何工作。如果我应该做#2,如果Flask正在监听端口5000,有人可以解释我应该如何配置nginx吗?我在该片段中的哪个位置配置文件系统上静态资产的路径?在我的 javascript 代码中,我使用什么 url 路径来引用资产?