我在为Phaser正在处理的小游戏提供静态文件(图像资产等)时遇到问题。我在服务器(和客户端的socket.io)上使用flask-socketio进行网络连接,这就是为什么我试图在Flask下工作的原因。据我所知,我必须使用Flask来提供静态资源,否则我会遇到Same-origin policy的问题。使用Flask服务静态资源 - 运行同源策略
事实上,我试着用nginx的不同端口上提供服务的资产,但我在浏览器控制台(Safari在这种情况下)得到这个消息:SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.
我看着就如何为静态文件的瓶文档中并且它说使用“url_for”。但是,它只适用于HTML模板文件。我试图使用相位引擎,像这样(只是举例)来加载我的javascript代码中的静态资源:
this.load.image('player', 'assets/player.png’); //this.load.image('player’, url);
在那里我可以没有明显的使用“url_for”,因为它不是一个模板文件,但JavaScript的码。
所以我的问题是,我如何服务我的静态资源,以便我不违反同源策略?
- 有没有服务于瓶静态资源除了使用“url_for”另一种安全的方式?
- 或者我应该使用nginx作为反向代理?在烧瓶socketio文档,我发现这个nginx的配置片段:Flask-SocketIO documentation(请向下滚动到它说:“使用nginx的一个WebSocket的反向代理“)
关于#2,我不太明白如果我应该做#2,如果Flask正在监听5000端口,有人可以好好解释一下如何配置nginx吗?在那段代码中,我可以在文件系统中配置我的静态资源的路径吗? javascript代码,我用什么url路径来引用资源?
谢谢。我正在向后看。我现在通过将nginx放在“Flask”的前面而不是反之亦然。 – user45183
很高兴我能帮到你。顺便说一句,我不知道如何配置Flask或NGinx这种方式。 (我只是知道这是一个“最佳实践”)也许你可以扩展这个答案,包括你使用的步骤和配置? (这是一个社区维基答案。)这样,它会帮助其他有同样问题的人。 – jpaugh