2013-07-02 27 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