我在爲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