2013-07-02 42 views
1

我有一個Flask應用程序,它將在Apache的生產環境下運行。我有一些靜態文件,但它們需要經過身份驗證的訪問。因此,使用X-SENDFILE似乎合理的身份驗證後,以加快文件傳遞:使用X-Sendfile的Flask開發服務器

flaskapp = flask.Flask() 
flaskapp.use_x_sendfile = True 

又在哪裏我生成的響應:

return flask.send_file(filepath) 

看來Apache下很好地工作。問題是,當我運行開發服務器:

# Use SharedDataMiddleware to deliver JS, CSS, icons, etc. 
flaskapp.wsgi_app = SharedDataMiddleware(flaskapp.wsgi_app, {'/static': '/path/to/static'}) 
flaskapp.run(host='0.0.0.0', debug=True) 

當我運行這種方式與use_x_sendfile = True,在X-SENDFILE頭中的實際響應顯示了和一個空文件(0字節)被傳遞到客戶端。關閉X-Sendfile(並強制瀏覽器放棄緩存文件)解決了這個問題,所以看起來Werkzeug服務器Flask運行的不是處理X-Sendfile頭。有沒有辦法讓開發服務器來處理X-Sendfile,或者我在開發過程中被迫關閉它?

回答

2

燒瓶文檔中提到server must support 和werkzeug的dev服務器沒有(文檔中沒有提及任何地方,通過werkzeug的源代碼sendfile返回沒有匹配的grep)。

將這種行爲添加到服務器上可能不太難,但我不確定是否支持這些高級功能是開發服務器的優先級。

順便說一句,作爲附加關鍵字參數run通過傳遞給WERKZEUG的run_simple,你不需要自己創建的中間件,你可以使用:

flaskapp.run(host='0.0.0.0', debug=True, static_files={'/static': '/path/to/static'}) 
+0

謝謝你的提示。我從Flask的站點獲得'SharedDataMiddleware'的東西。 – jpmc26